Virtualenv: pipx.yがなく、代わりにpip-xyが存在します

作成日 2020年03月15日  ·  4コメント  ·  ソース: pypa/virtualenv

問題

virtualenv 20.0.10では、少なくともvirtualenv環境が作成されると、pipメジャーバージョンファイルの命名規則が変更されました。

16.7.xでは20.0.2でpip3.7がありましたが、これはpip-3.7変更されましたが、複数の環境とビルドをプロビジョニングする自動化パターンの観点から、両方にpip3が残っています。 pip${MAJOR_VERSION}パターンを使用するビルドの依存関係が多数ある可能性があります。

おそらく、古い命名規則を尊重するためにシンボリックリンクを追加すると、多くの人がデバッグに多くの時間を費やすのを防ぐことができます。

環境

  • OS:CentOS 8
  • OS Python:Python 3.6.8
  • virtualenvに使用されているpythonインタープリターは、ソースからコンパイルされたPython3.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
bug

全てのコメント4件

これは、スクリプトの作成を処理する標準ライブラリを採用した場合の副作用ですスクリプトのバリエーションは、 ます。 16.xがダッシュなしでそれらを追加した理由は完全にはわかりません... pipがdistlibsの動作をエスケープするかどうかを確認する必要があるかもしれませんが、AFAIKpipも同様のスタイルを生成するはずです。

したがって、ここでpipは他の部分と比較して奇妙なことをしているようですが、Linuxディストリビューションが物事を処理する方法、およびpython自体のバージョンと一致している可能性があります。

  • ここを参照https://github.com/pypa/pip/blob/master/setup.py#L79-L81、pippipx.y形式をハードコーディングしているようです。 コンソールスクリプトはビルド時に記述されるため、少しずれています。したがって、ユニバーサルホイールの場合、別のPythonにインストールする場合(たとえば、3.8でビルドされたホイール、2.7にインストール)、pipはバージョン番号をターゲットのPythonバージョンに書き換える必要があります。どういうわけか、コンソールスクリプトマッピング内で定義されているものを尊重せず、名前を変更します。 特に、 pipx.y形式も使用します。
  • distlibは、https://bitbucket.org/pypa/distlib/commits/eedb3ae9233562e970dab2212892969bd87be01cに従って、 pip-x.y形式を優先します
  • 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の一部である必要があるように感じます🤷‍♂

今のところ、 pipx.ypip-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)を参照してください。 問題が解決されていない場合は、試して報告してください。 そうでない場合は、ここにコメントしてください。チケットを再開します。 ご不便をおかけしましたことをお詫び申し上げますとともに、この新しいメジャーリリースで予期しないバグを解決するまで、しばらくお待ちいただきますようお願いいたします。
thanks

このページは役に立ちましたか?
0 / 5 - 0 評価