問題
virtualenv 20.0.10では、少なくともvirtualenv環境が作成されると、pipメジャーバージョンファイルの命名規則が変更されました。
16.7.xでは20.0.2でpip3.7
がありましたが、これはpip-3.7
変更されましたが、複数の環境とビルドをプロビジョニングする自動化パターンの観点から、両方にpip3
が残っています。 pip${MAJOR_VERSION}
パターンを使用するビルドの依存関係が多数ある可能性があります。
おそらく、古い命名規則を尊重するためにシンボリックリンクを追加すると、多くの人がデバッグに多くの時間を費やすのを防ぐことができます。
環境
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
したがって、ここでpipは他の部分と比較して奇妙なことをしているようですが、Linuxディストリビューションが物事を処理する方法、およびpython自体のバージョンと一致している可能性があります。
pipx.y
形式をハードコーディングしているようです。 コンソールスクリプトはビルド時に記述されるため、少しずれています。したがって、ユニバーサルホイールの場合、別のPythonにインストールする場合(たとえば、3.8でビルドされたホイール、2.7にインストール)、pipはバージョン番号をターゲットのPythonバージョンに書き換える必要があります。どういうわけか、コンソールスクリプトマッピング内で定義されているものを尊重せず、名前を変更します。 特に、 pipx.y
形式も使用します。pip-x.y
形式を優先しますpip-x.y
形式も優先します。https: //github.com/pypa/setuptools/blob/master/setup.py#L46-L47を参照してツールがバージョン管理されたスクリプトを定義する方法、およびフロントエンドがバックエンドと通信する方法を標準化したことがないように思えます。 または、フロントエンドオプションにする必要がありますか? @pfmoore @pradyunsgの考えは、どこかでPEP-517の一部である必要があるように感じます🤷♂
今のところ、 pipx.y
とpip-x.y
も生成するのは回避策だと思います...
ツールがバージョン管理されたスクリプトを定義する方法、およびフロントエンドがバックエンドと通信する方法を標準化したことがないように思えます。
これが基本的な状況です。
pipは、distlibに切り替える前にpipが使用していた形式であり、下位互換性が懸念されていたため、distlibと一致しないバージョンを生成します(IIRC)。
長期的なソリューションの場合、これはおそらく標準化する必要があります(実際には、 console-scripts
メカニズム全体が標準化されていないため、この領域全体をカバーする新しいPEPが必要になる可能性があります)。
こんにちは、この問題の修正はvirtualenv20.0.11を介してリリースされました。 https://pypi.org/project/virtualenv/20.0.11/(https://virtualenv.pypa.io/en/latest/changelog.html#v20-0-11-2020-03-18)を参照してください。 問題が解決されていない場合は、試して報告してください。 そうでない場合は、ここにコメントしてください。チケットを再開します。 ご不便をおかけしましたことをお詫び申し上げますとともに、この新しいメジャーリリースで予期しないバグを解決するまで、しばらくお待ちいただきますようお願いいたします。