Isu
Di virtualenv 20.0.10 setidaknya ketika lingkungan virtualenv dibuat, konvensi penamaan file versi utama pip telah berubah.
Di 16.7.x ada pip3.7
di 20.0.2 ini telah berubah menjadi pip-3.7
meskipun masih ada pip3
di keduanya, dalam hal pola otomatisasi yang menyediakan banyak lingkungan dan bangunan mungkin ada banyak dependensi build yang menggunakan pola pip${MAJOR_VERSION}
.
Mungkin menambahkan symlink untuk menghormati konvensi penamaan yang lebih lama dapat mencegah banyak orang menghabiskan waktu berjam-jam untuk debugging.
Lingkungan Hidup
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
Reproduksi
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
Ini adalah efek samping dari mengadopsi pustaka standar yang menangani pembuatan skrip, varian skrip ditambahkan di sini https://bitbucket.org/pypa/distlib/commits/eedb3ae9233562e970dab2212892969bd87be01c. Tidak sepenuhnya yakin mengapa 16.x menambahkannya tanpa tanda hubung ... mungkin perlu memeriksa apakah pip lolos dari perilaku distlibs, tetapi pip AFAIK juga harus menghasilkan gaya yang serupa.
Jadi tampaknya di sini pip melakukan sesuatu yang aneh, dibandingkan dengan yang lain, meskipun mungkin itu sejalan dengan bagaimana distribusi Linux menangani berbagai hal, dan bagaimana versi python itu sendiri:
pipx.y
; Ini agak salah karena skrip konsol ditulis pada waktu pembuatan, jadi dalam kasus roda universal jika Anda menginstal pada python yang berbeda (misalnya roda dibangun dengan 3.8, instal di 2.7) pip harus menulis ulang nomor versi untuk menargetkan versi python, entah bagaimana tidak menghormati apa yang didefinisikan dalam pemetaan skrip konsol, dan mengubah nama; khususnya, ini juga menggunakan format pipx.y
.pip-x.y
, sesuai https://bitbucket.org/pypa/distlib/commits/eedb3ae9233562e970dab2212892969bd87be01cpip-x.y
, lihat https://github.com/pypa/setuptools/blob/master/setup.py#L46 -L47Sepertinya kami tidak pernah menstandarkan bagaimana alat harus mendefinisikan skrip berversi, dan bagaimana frontend dapat berkomunikasi ke backend yang diinginkannya seperti itu. Atau harus menjadi opsi frontend? @pfmoore @pradyunsg pemikirannya terasa seperti harus menjadi bagian dari PEP-517 di suatu tempat 🤷♂
Untuk saat ini, saya pikir itu adalah solusi untuk juga menghasilkan pipx.y
dan pip-x.y
...
Sepertinya kami tidak pernah menstandarkan bagaimana alat harus mendefinisikan skrip berversi, dan bagaimana frontend dapat berkomunikasi ke backend yang diinginkannya seperti itu.
Ini pada dasarnya adalah situasinya.
Pip menghasilkan versi yang tidak cocok dengan distlib karena itu adalah format yang digunakan pip sebelum kami beralih ke distlib, dan kompatibilitas mundur menjadi perhatian (IIRC).
Untuk solusi jangka panjang, ini mungkin harus distandarisasi (sebenarnya, seluruh mekanisme console-scripts
tidak distandarisasi, jadi mungkin diperlukan PEP baru yang mencakup seluruh area ini).
Halo, perbaikan untuk masalah ini telah dirilis melalui virtualenv 20.0.11; lihat https://pypi.org/project/virtualenv/20.0.11/ (https://virtualenv.pypa.io/en/latest/changelog.html#v20-0-11-2020-03-18). Silakan coba dan laporkan kembali jika masalah Anda belum teratasi; jika tidak, silakan beri komentar di sini, dan kami akan membuka kembali tiketnya. Kami ingin meminta maaf atas ketidaknyamanan yang ditimbulkan dan berterima kasih atas kesabaran Anda sementara kami menyelesaikan bug yang tidak terduga dengan rilis besar yang baru ini.