Virtualenv: pipx.y отсутствует, вместо этого присутствует pip-xy

Созданный на 15 мар. 2020  ·  4Комментарии  ·  Источник: pypa/virtualenv

Проблема

В virtualenv 20.0.10, по крайней мере, когда создается среда virtualenv, соглашение об именах файла основной версии pip было изменено.

В 16.7.x было pip3.7 в 20.0.2, это изменилось на pip-3.7 хотя в обоих все еще есть pip3 с точки зрения шаблонов автоматизации, которые предоставляют несколько сред и сборок может быть много зависимостей сборки, использующих шаблон pip${MAJOR_VERSION} .

Возможно, добавление символической ссылки в соответствии со старым соглашением об именах может помешать многим людям тратить много времени на отладку.

Среда

  • ОС: CentOS 8
  • ОС Python: Python 3.6.8
  • Интерпретатор python, используемый для virtualenv, - это Python 3.7.6, скомпилированный из исходного кода.
  • Список системных пунктов
pip list --format=columns

Package             Version
------------------- -------
appdirs             1.4.3
asn1crypto          0.24.0
cffi                1.11.5
configobj           5.0.6
cryptography        2.3
dbus-python         1.2.4
decorator           4.2.1
distlib             0.3.0
filelock            3.0.12
gpg                 1.10.0
idna                2.5
importlib-metadata  1.5.0
importlib-resources 1.3.1
iniparse            0.4
isc                 2.0
netifaces           0.10.6
pciutils            2.3.6
perf                0.1
pip                 9.0.3
ply                 3.9
pycparser           2.14
pygobject           3.28.3
pyOpenSSL           18.0.0
pyparsing           2.1.10
python-dateutil     2.6.1
python-dmidecode    3.12.2
python-linux-procfs 0.6
pyudev              0.21.0
rhnlib              2.8.6
rpm                 4.14.2
schedutils          0.6
selinux             2.9
sepolicy            1.1
setools             4.2.2
setuptools          39.2.0
six                 1.11.0
slip                0.6.4
slip.dbus           0.6.4
syspurpose          1.25.17
zipp                3.1.0

Воспроизводить

cd /opt
pip install virtualenv==20.0.10

pip list --format=columns | grep virtualenv
virtualenv          20.0.10

virtualenv --python=/opt/python_virtualenv/versions/3.7.6/bin/python3.7 venv_20.0.10

ls -al /opt/venv_20.0.10/bin | grep pip
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip3
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip-3.7

pip uninstall virtualenv
pip install virtualenv==16.7.10
virtualenv --python=/opt/python_virtualenv/versions/3.7.6/bin/python3.7 venv_16.7.10

ls -al /opt/venv_16.7.10/bin | grep pip
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip3
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip3.7
ls -al /opt/venv_20.0.10/bin
total 68
drwxr-xr-x. 2 root root 4096 Mar 15 14:08 .
drwxr-xr-x. 4 root root 4096 Mar 15 14:08 ..
-rw-r--r--. 1 root root 2206 Mar 15 14:08 activate
-rw-r--r--. 1 root root 1425 Mar 15 14:08 activate.csh
-rw-r--r--. 1 root root 3056 Mar 15 14:08 activate.fish
-rw-r--r--. 1 root root 1751 Mar 15 14:08 activate.ps1
-rw-r--r--. 1 root root 1199 Mar 15 14:08 activate_this.py
-rw-r--r--. 1 root root 1147 Mar 15 14:08 activate.xsh
-rwxr-xr-x. 1 root root  242 Mar 15 14:08 easy_install
-rwxr-xr-x. 1 root root  242 Mar 15 14:08 easy_install3
-rwxr-xr-x. 1 root root  242 Mar 15 14:08 easy_install-3.7
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip3
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip-3.7
lrwxrwxrwx. 1 root root   51 Mar 15 14:08 python -> /opt/python_virtualenv/versions/3.7.6/bin/python3.7
lrwxrwxrwx. 1 root root    6 Mar 15 14:08 python3 -> python
lrwxrwxrwx. 1 root root    6 Mar 15 14:08 python3.7 -> python
-rwxr-xr-x. 1 root root  220 Mar 15 14:08 wheel
-rwxr-xr-x. 1 root root  220 Mar 15 14:08 wheel3
-rwxr-xr-x. 1 root root  220 Mar 15 14:08 wheel-3.7


ls -al /opt/venv_16.7.10/bin
total 15360
drwxr-xr-x. 2 root root     4096 Mar 15 14:10 .
drwxr-xr-x. 5 root root     4096 Mar 15 14:10 ..
-rw-r--r--. 1 root root     2206 Mar 15 14:10 activate
-rw-r--r--. 1 root root     1425 Mar 15 14:10 activate.csh
-rw-r--r--. 1 root root     3090 Mar 15 14:10 activate.fish
-rw-r--r--. 1 root root     1751 Mar 15 14:10 activate.ps1
-rw-r--r--. 1 root root     1517 Mar 15 14:10 activate_this.py
-rw-r--r--. 1 root root     1147 Mar 15 14:10 activate.xsh
-rwxr-xr-x. 1 root root      245 Mar 15 14:10 easy_install
-rwxr-xr-x. 1 root root      245 Mar 15 14:10 easy_install-3.7
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip3
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip3.7
lrwxrwxrwx. 1 root root        9 Mar 15 14:10 python -> python3.7
lrwxrwxrwx. 1 root root        9 Mar 15 14:10 python3 -> python3.7
-rwxr-xr-x. 1 root root 15664944 Mar 15 14:10 python3.7
-rwxr-xr-x. 1 root root     2335 Mar 15 14:10 python-config
-rwxr-xr-x. 1 root root      223 Mar 15 14:10 wheel

Все 4 Комментарий

Это побочный эффект принятия стандартной библиотеки, которая обрабатывает создание сценария, вариант сценария добавлен здесь https://bitbucket.org/pypa/distlib/commit/eedb3ae9233562e970dab2212892969bd87be01c. Не совсем уверен, почему 16.x добавлял их без тире ... может потребоваться проверить, избегает ли pip поведения distlibs, но AFAIK pip также должен генерировать похожие стили.

Кажется, здесь pip делает что-то странное по сравнению с отдыхом, хотя, возможно, это соответствует тому, как дистрибутивы Linux обрабатывают вещи, и как версии самого python:

  • см. здесь https://github.com/pypa/pip/blob/master/setup.py#L79 -L81, pip, похоже, жестко кодирует формат pipx.y ; это немного не так, поскольку консольный скрипт записывается во время сборки, поэтому в случае универсального колеса, если вы устанавливаете на другой питон (например, колесо, построенное с помощью 3.8, установка на 2.7), pip должен переписать номер версии на целевую версию python, каким-то образом не соблюдая то, что определено в сопоставлении скриптов консоли, и изменяя имя; в частности, он также использует формат pipx.y .
  • distlib предпочитает формат pip-x.y , согласно https://bitbucket.org/pypa/distlib/commit/eedb3ae9233562e970dab2212892969bd87be01c
  • setuptools также предпочитает формат pip-x.y , см. https://github.com/pypa/setuptools/blob/master/setup.py#L46 -L47
  • колеса вообще не определяют версионные исполняемые файлы, см. https://github.com/pypa/wheel/blob/master/setup.cfg#L49

Мне кажется, что мы никогда не стандартизировали, как инструменты должны определять версионные скрипты и как интерфейс может сообщать бэкэнду, что он этого хочет. Или должен быть вариант внешнего интерфейса? @pfmoore @pradyunsg кажется, что он должен быть частью PEP-517 somewhere

На данный момент я думаю, что это обходной путь, чтобы также сгенерировать pipx.y и pip-x.y ...

Мне кажется, что мы никогда не стандартизировали, как инструменты должны определять версионные скрипты и как интерфейс может сообщать бэкэнду, что он этого хочет.

Это в основном ситуация.

Pip генерирует версии, которые не соответствуют distlib, потому что это был формат, который pip использовал до того, как мы перешли на distlib, и обратная совместимость была проблемой (IIRC).

Для более долгосрочного решения это, вероятно, следует стандартизировать (на самом деле весь механизм console-scripts не стандартизирован, поэтому, вероятно, потребуется новый PEP, охватывающий всю эту область).

Здравствуйте, исправление этой проблемы было выпущено через virtualenv 20.0.11; см. https://pypi.org/project/virtualenv/20.0.11/ (https://virtualenv.pypa.io/en/latest/changelog.html#v20-0-11-2020-03-18). Пожалуйста, попробуйте и сообщите, если ваша проблема не решена; Если нет, прокомментируйте здесь, и мы повторно откроем заявку. Мы приносим извинения за доставленные вам неудобства и благодарим вас за терпение, пока мы устраняем неожиданные ошибки в этом новом основном выпуске.
thanks

Была ли эта страница полезной?
0 / 5 - 0 рейтинги