Как обновить pip3 на Debian 12 (Книжный червь)?
The pip3
двоичный файл в моем только что обновленном Debian 12 все еще недостаточно нов, чтобы поддерживать флаги--json
и--include-injected
, который мне нужен, чтобы иметь возможность использовать модуль ansible
community.general.pipx
.
Старомодный способ обновления не работает:
$ sudo pip3 install --upgrade pip
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.11/README.venv for more information.
note: If you believe this is a mistake, please contact your Python installation or OS
distribution provider. You can override this, at the risk of breaking your Python
installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
Это также причина, по которой мне в первую очередь нужно использовать модуль Ansible.
- Как избавиться от этой проблемы курицы и яйца?
- Достаточно ли безопасно использовать
--break-system-package
в данном конкретном случае? - Или имеет смысл установить новую версию
pip
отдельно с помощью CLIpipx
сначала в виртуальной среде, а затем позволить модулю Ansible использовать его?
1 ответ
Прежде всего,pip
иpipx
— это отдельные программы. pip — это менеджер пакетов Python общего назначения, он может работать в масштабе всей системы (я имею в виду... он раньше) или в виртуальной среде. pipx фокусируется именно на установке двоичных файлов (а не библиотек) и работает путем создания изолированной виртуальной среды и запуска pip внутри нее.
--json
и--include-injected
являются флагами pipx (в частности, «списком pipx»), а не флагами pip. Ваша проблема в том, что pipx слишком стар, а не в том, что pip слишком стар.
Ansible использует здесь флаги.
Чтобы безопасно обновить pipx, вам необходимо выяснить, как вы его изначально установили. Был ли он установлен как пакет Debian (с помощью dpkg и/или apt) или установлен вручную с помощью pip? Найдите его местоположение, например:
$ which pipx
/usr/bin/pipx
Проверьте, распознает ли dpkg этот файл и знает, к какому пакету Debian он принадлежит.
$ dpkg --search /usr/bin/pipx
pipx: /usr/bin/pipx
Если вы это видите, отлично. Просто выполните обычное обновление системы, и вы получите новую версию. (Это маловероятно, потому что если бы все было так просто, вы бы даже не задавали этот вопрос.)
$ dpkg --search /usr/bin/pipx
dpkg-query: no path found matching pattern /usr/bin/pipx
Если вы это видите, это означает, что вы ранее установили его вручную с помощьюsudo pip install pipx
или что-то подобное, когда это еще было разрешено. В этом случае вашей целью должно быть полное удаление старого pipx вместе со всеми его зависимостями, которые также были установлены вручную, а затем установка официального пакета Debian pipx.
Эта команда выводит имя владельца пакета Debian для каждого файла в /usr/lib/python*. Файлы, которые не принадлежат ни одному пакету Debian, выведут ошибку. Эти ошибки сообщат вам о ранее установленных вручную пакетах, которые, вероятно, потребуется удалить вручную.
$ find /usr/lib/python* -type f ! -name '*.pyc' -exec dpkg --search {} + 2>&1
Я думаю, что правильный способ их удаления - этоsudo pip uninstall --break-system-packages pipx
(и так далее для других пакетов). В этом случае--break-system-packages
должно быть все в порядке, потому что вы просто убираете беспорядок, который был создан до того, как появился флаг. НО УБЕДИТЕСЬ, что вы удаляете только те пакеты, которые имеют пометку «путь не найден, соответствующий шаблону». ошибка. НЕ пакеты, которые уже распознаны dpkg.
Когда команда не выводит никаких сообщений «не найден путь, соответствующий шаблону»; больше ошибок, установите официальный пакет Debian pipx, используяsudo apt-get install pipx
. Если это работает, все готово. Если он выдает какие-либо конфликты с существующими файлами, возможно, старый pipx не был полностью удален.