Virtualenv: pipx.y مفقود ، بدلاً من النقطة xy موجودة

تم إنشاؤها على ١٥ مارس ٢٠٢٠  ·  4تعليقات  ·  مصدر: pypa/virtualenv

قضية

في virtualenv 20.0.10 على الأقل عند إنشاء بيئة virtualenv ، تغير اصطلاح التسمية لملف الإصدار الرئيسي من نقطة.

في 16.7.x ، كان هناك pip3.7 في 20.0.2 وقد تغير هذا إلى pip-3.7 على الرغم من أنه لا يزال هناك pip3 في كليهما ، من حيث أنماط الأتمتة التي توفر بيئات وبنيات متعددة قد يكون هناك العديد من تبعيات البناء التي تستخدم النمط pip${MAJOR_VERSION} .

ربما تؤدي إضافة ارتباط رمزي لتكريم اصطلاح التسمية الأقدم إلى منع العديد من الأشخاص من قضاء ساعات طويلة في تصحيح الأخطاء.

بيئة

  • نظام التشغيل: CentOS 8
  • OS 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
bug

ال 4 كومينتر

هذا هو أحد الآثار الجانبية لاعتماد المكتبة القياسية التي تتعامل مع إنشاء البرنامج النصي ، تمت إضافة متغير البرنامج النصي هنا https://bitbucket.org/pypa/distlib/commits/eedb3ae9233562e970dab2212892969bd87be01c. لست متأكدًا تمامًا من سبب قيام 16.x بإضافتها بدون شرطة ... قد تحتاج إلى التحقق مما إذا كانت النقطة تتسرب من سلوك التوزيعات ، ولكن يجب أن تولد نقطة AFAIK أيضًا أنماطًا مماثلة.

لذلك يبدو أن النقطة تقوم بشيء غريب ، مقارنة بالباقي ، على الرغم من أنها ربما تتماشى مع كيفية تعامل توزيعات Linux مع الأشياء ، وكيفية إصدارات python نفسها:

  • انظر هنا https://github.com/pypa/pip/blob/master/setup.py#L79 -L81 ، يبدو أن النقطة ترمز إلى تنسيق pipx.y ؛ إنه بعيد بعض الشيء حيث يتم كتابة البرنامج النصي لوحدة التحكم في وقت الإنشاء ، لذا في حالة وجود العجلة العامة إذا قمت بالتثبيت على بيثون مختلف (على سبيل المثال ، تم تصميم العجلة بـ 3.8 ، والتثبيت على 2.7) ، يجب على النقطة إعادة كتابة رقم الإصدار لاستهداف إصدار بايثون ، بطريقة ما لا تحترم ما تم تعريفه في تعيين البرنامج النصي لوحدة التحكم ، وتغيير الاسم ؛ بشكل خاص ، يستخدم أيضًا تنسيق pipx.y .
  • يفضل distlib تنسيق pip-x.y ، لكل https://bitbucket.org/pypa/distlib/commits/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

يبدو لي أننا لم نقم مطلقًا بتوحيد الكيفية التي يجب أن تحدد بها الأدوات البرامج النصية ذات الإصدار ، وكيف يمكن للواجهة الأمامية التواصل مع الواجهة الخلفية التي تريدها. أم يجب أن يكون خيار الواجهة الأمامية؟ pfmoorepradyunsg تبدو الأفكار وكأنها يجب أن تكون جزءًا من PEP-517 في مكان ما 🤷‍♂

في الوقت الحالي ، أعتقد أنه حل بديل لإنشاء pipx.y و pip-x.y ...

يبدو لي أننا لم نقم مطلقًا بتوحيد الكيفية التي يجب أن تحدد بها الأدوات البرامج النصية ذات الإصدار ، وكيف يمكن للواجهة الأمامية التواصل مع الواجهة الخلفية التي تريدها.

هذا هو الوضع في الأساس.

ينشئ Pip إصدارات لا تتطابق مع distlib لأن هذا هو التنسيق الذي استخدمته نقطة قبل أن ننتقل إلى 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 التقييمات