Problem
In virtualenv 20.0.10 hat sich zumindest beim Erstellen einer virtualenv-Umgebung die Namenskonvention der pip-Hauptversionsdatei geändert.
In 16.7.x gab es in pip3.7
20.0.2 pip-3.7
geändert, obwohl es in beiden immer noch pip3
, was Automatisierungsmuster betrifft, die mehrere Umgebungen und Builds bereitstellen Möglicherweise gibt es viele Build-Abhängigkeiten, die das Muster pip${MAJOR_VERSION}
.
Vielleicht kann das Hinzufügen eines Symlinks zu Ehren der älteren Namenskonvention verhindern, dass viele Leute viele Stunden mit dem Debuggen verbringen.
Umgebung
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
Reproduzieren
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
Dies ist ein Nebeneffekt bei der Übernahme der Standardbibliothek für die Skripterstellung. Die hier hinzugefügte Skriptvariante
Es scheint also, dass Pip hier etwas Seltsames tut, verglichen mit Rest, obwohl es vielleicht damit übereinstimmt, wie Linux-Distributionen mit Dingen umgehen und wie Python selbst Versionen:
pipx.y
-Format fest zu codieren; Es ist ein bisschen anders, da das Konsolenskript zur Erstellungszeit geschrieben wird. Wenn Sie also das Universalrad auf einem anderen Python installieren (z. B. mit 3.8 gebautes Rad, auf 2.7 installieren), muss pip die Versionsnummer neu schreiben, um die Python-Zielversion zu erhalten. irgendwie nicht respektieren, was in der Konsolenskriptzuordnung definiert ist, und den Namen ändern; Insbesondere wird auch ein pipx.y
-Format verwendet.pip-x.y
unter https://bitbucket.org/pypa/distlib/commits/eedb3ae9233562e970dab2212892969bd87be01cpip-x.y
, siehe https://github.com/pypa/setuptools/blob/master/setup.py#L46 -L47Mir scheint, wir haben nie standardisiert, wie Tools versionierte Skripte definieren sollen und wie das Frontend mit dem gewünschten Backend kommunizieren kann. Oder sollte eine Frontend-Option sein? @pfmoore @pradyunsg Gedanken scheinen irgendwo Teil von PEP-517 zu sein 🤷♂
Im Moment denke ich, dass es eine Problemumgehung ist, auch pipx.y
und pip-x.y
zu generieren ...
Mir scheint, wir haben nie standardisiert, wie Tools versionierte Skripte definieren sollen und wie das Frontend mit dem gewünschten Backend kommunizieren kann.
Dies ist im Grunde die Situation.
Pip generiert Versionen, die nicht mit distlib übereinstimmen, da dies das Format war, das pip verwendet hatte, bevor wir zu distlib gewechselt sind, und die Abwärtskompatibilität ein Problem darstellte (IIRC).
Für eine längerfristige Lösung sollte dies wahrscheinlich standardisiert werden (tatsächlich ist der gesamte console-scripts
-Mechanismus nicht standardisiert, sodass wahrscheinlich ein neuer PEP erforderlich ist, der den gesamten Bereich abdeckt).
Hallo, ein Fix für dieses Problem wurde über virtualenv 20.0.11 veröffentlicht. Siehe https://pypi.org/project/virtualenv/20.0.11/ (https://virtualenv.pypa.io/en/latest/changelog.html#v20-0-11-2020-03-18). Bitte versuchen Sie es und melden Sie sich zurück, wenn Ihr Problem nicht behoben wurde. Wenn nicht, kommentieren Sie bitte hier und wir öffnen das Ticket erneut. Wir möchten uns für die Unannehmlichkeiten entschuldigen, die Ihnen dadurch entstanden sind, und uns für Ihre Geduld bedanken, während wir die unerwarteten Fehler mit dieser neuen Hauptversion beheben.