Virtualenv: ولدت مئات العمليات

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

بعد تثبيت python 3.7.4 64 bit ، حاولت بدء بيئة افتراضية في مجلد. ومع ذلك ، تم بدء حوالي ألف عملية بيثون ولم تكتمل البيئة الافتراضية.

نظام التشغيل: Windows 10 Home
يعمل الكود في Cygwin 64 بت

رمز الفشل:

mkdir test
cd test
virtualenv venv

pip list

إصدار الحزمة


أسترويد 2.2.0
كولوراما 0.4.1
isort 4.3.9
وكيل lazy-object-proxy 1.3.1
مكابي 0.6.1
نقطة 19.1.1
pylint 2.3.0
حبل 0.14.0
برنامج setuptools 40.8.0
ستة 1.12.0
طبع- ast 1.3.1
Virtualenv 16.6.1
ملفوفة 1.11.1

التعليق الأكثر فائدة

عامل صيانة هنا. كما قلت أعلاه ، تغير العقد الخاص ببعض المتغيرات الداخلية لـ CPython ، وهذا يسبب الآن حلقة لا نهائية في إنشاء العملية لكل من python 3.7 و 3.8.

ال 31 كومينتر

حاولت تثبيت python و pip و virtualenv لأول مرة اليوم وواجهت نفس المشكلة.

لقد أصلحته من خلال التعليق على 3 أسطر في
Python\Python37\Lib\site-packages\virtualenv.py
وإضافة
-p python
عند تشغيل virtualenv

الأسطر التي علقت عليها هي 783-785:
if hasattr(sys, "_base_executable"):
print("hasattr(sys, \"_base_executable\") == yes")
return sys._base_executable

AndrYast بعد تفعيل البيئة هل ما زلت على 3.7.4؟ يبدو أن هذه مشكلة خاصة مع الإصدار 3.7.4 ، والذي تم إصداره بالأمس (7/8/19).

thingselliotprograms نعم ، قيد التشغيل
venv\Scripts\activate
python --version
يعطيني
Python 3.7.4

تواجه نفس المشكلة مع تعليق pipenv منذ ترقية Python أمس إلى 3.7.4. القضية الأساسية المتعلقة بـ virtualenv. تم تخفيض إصدار python إلى 3.7.3 في الوقت الحالي.

تم كسر أحدث إصدار من برنامج Ack virtualenv لأن https://github.com/python/cpython/pull/14428 يعين دائمًا sys._base_executable .

أواجه نفس المشكلة مع 3.7.4. أنا أستخدم pipenv وأحصل على [WinError 8] Not enough memory resources are available to process this command . لا يمكنني إنشاء أي virtualenv. كل شيء يعمل بشكل رائع في 3.7.3.

أواجه هذه المشكلة بالضبط أيضًا مع 3.7.4.

رعد عمليات python.exe يستنفد الذاكرة ويفشل إنشاء virtualenv في النهاية.

لم تكن المشكلة موجودة مع 3.7.2.

عامل صيانة هنا. كما قلت أعلاه ، تغير العقد الخاص ببعض المتغيرات الداخلية لـ CPython ، وهذا يسبب الآن حلقة لا نهائية في إنشاء العملية لكل من python 3.7 و 3.8.

ليست لدي فكرة عما إذا كانت هذه فكرة _ جيدة ، لكنني تمكنت من إنشاء بيئة افتراضية بهذا الاختراق السريع.

# virtualenv.py:783
if hasattr(sys, "_base_executable") and sys.version_info < (3, 7, 4):
    return sys._base_executable

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

ربما يجب أن يكون هناك فحص إضافي sys._base_executable != sys.executable . لكن بصراحة ، لا أعرف - يبدو أن هذا يتغير باستمرار في إصدارات التصحيح وليس لدي الوقت لمواكبة ما يحدث (يبدو أن كل ذلك مرتبط بالعمل على دعم إنشاء "متجر Windows" بايثون).

ربما تستطيع zooba التعليق أو تقديم اقتراحات هنا. نحن نستخدم عناصر داخلية غير موثقة ، لذا فإن الأمر متروك لنا في النهاية لمعالجته ، لكنني لا أعرف طريقة مدعومة للحصول على المعلومات التي نحتاجها ، لذلك لا أرى حلاً لن يخضع لـ كسر محتمل في كل مرة نحصل فيها على إصدار جديد من Python :-(

في النهاية ، ربما يكون # 1377 هو الحل الوحيد الموثوق هنا.

أعتقد أننا سنكون بخير طالما أضفنا هذا الشيك.

تفشل أيضًا وظائف Travis CI التي تعمل بنظام Windows ومحاولة إنشاء Virtualenv. انتقل ترافيس سي آي مؤخرًا إلى 3.7.4. 😞

https://travis-ci.community/t/infinite-loop-of-virtualenv-windows/4139

ربما معلومات مفيدة من ترافيس يبني:

version: v6.2.0 https://github.com/travis-ci/worker/tree/5e5476e01646095f48eec13196fdb3faf8f5cbf7
instance: travis-ci-onion-1803-containers-1542208204-ad01dca (via amqp)
bash version 4.4.19(2)-release
Chocolatey v0.10.11
python3 v3.7.4 [Approved]
python3 has been installed.
Successfully installed pip-19.1.1
Successfully installed virtualenv-16.6.1

$ virtualenv $HOME/venv
Running virtualenv with interpreter c:\python37\python.exe
Running virtualenv with interpreter c:\python37\python.exe
Running virtualenv with interpreter c:\python37\python.exe
Running virtualenv with interpreter c:\python37\python.exe
Running virtualenv with interpreter c:\python37\python.exe
...[repeats 763 more times]...
The command "virtualenv $HOME/venv" failed and exited with 1 during .
Your build has been stopped.
MemoryError

أعتقد أننا سنكون بخير طالما أضفنا هذا الشيك.

ألن يؤدي ذلك إلى إعادة تقديم (في 3.7.4) المشكلات التي كان المقصود من فحص base_executable إصلاحها؟ من المسلم به أن هذه المشكلات كانت أقل خطورة بكثير ، لذا من المحتمل أن الأمر لا يزال يستحق القيام به ، لكنني لا أعتقد أنه حل كامل.

لا أعتقد أنه يسبب التراجع ، أليس كذلك؟

لم أختبر بطريقة أو بأخرى (ولن يكون لدي وقت ، آسف).

ما الخلاصة هنا ، هل إصدار الإصلاح ممكن لـ virtualenv؟

نعم إنه كذلك إذا قام أي شخص بعمل علاقات عامة مع الإصلاح

هل لديك اختبار للانحدار الذي ذكرته؟

أعتقد أننا نفعل.

الاختبار ذي الصلة (المضاف في # 1345) هو test_create_environment_from_venv - لكن لاحظ أنه يجب تشغيله في جميع Python 3.7.2 و 3.7.3 و 3.7.4 حيث يختلف السلوك في كل منها ( ثانوية) ، وهذا ليس شيئًا ستغطيه CI ، على حد علمي.

شكرًا للإصلاحات السريعة في جميع أنحاء الأشخاص ، أعتقد أن مقارنة base_executable مع executable يوفر مكافئًا وظيفيًا لمجرد التحقق من وجود السمة _base_executable (ربما تكون أكثر أمانًا مثل هو أكثر وضوحا قليلا)

لدي فضول لمعرفة سبب المشكلة في المقام الأول.

تحتاج إلى الحصول على نظام python لإنشاء بيئة افتراضية. لن تنجح محاولة إنشاء بيئة افتراضية باستخدام حزمة venv أو virtualenv.

سابقًا ، تم تعيين sys._base_executable على python 3.7+ فقط إذا لم نكن في نظام python. تم تغيير هذا مع PR أعلاه ليتم تعيينه دائمًا (إذا كانت Python غير النظام ستساوي sys.executable ). يعمل التغيير على تبسيط التعليمات البرمجية المضمنة لـ CPython (في جزء من مكتبة النظام القياسية واكتشاف حزمة الموقع) ، ومن هنا جاء التغيير ، ولكنه تغيير في العقد. ومع ذلك ، نظرًا لأنه سمة خاصة ، لم يتم التفكير في التغيير ، لذا لا بأس. ثم مرة أخرى لم نتمكن من الحصول على هذه المعلومات من مكان آخر لذلك كنا نعتمد على هذا المجال الخاص.

بايثون 3.7.4
تواجه نفس المشكلة ، نشر مخرجاتنا في حال كان ذلك مفيدًا:

Requirement already up-to-date: virtualenv in c:\users\tester\appdata\local\programs\python\python37\lib\site-packages (16.6.1)
Running virtualenv with interpreter c:\users\tester\appdata\local\programs\python\python37\python.exe
Running virtualenv with interpreter c:\users\tester\appdata\local\programs\python\python37\python.exe
Running virtualenv with interpreter c:\users\tester\appdata\local\programs\python\python37\python.exe
...
(Repeated 350 times in total)

Traceback (most recent call last):
  File "c:\users\tester\appdata\local\programs\python\python37\lib\site-packages\virtualenv.py", line 2611, in <module>
    main()
  File "c:\users\tester\appdata\local\programs\python\python37\lib\site-packages\virtualenv.py", line 814, in main
    sub_process_call = subprocess.Popen([interpreter, file] + sys.argv[1:], env=env)
  File "c:\users\tester\appdata\local\programs\python\python37\lib\subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "c:\users\tester\appdata\local\programs\python\python37\lib\subprocess.py", line 1178, in _execute_child
    startupinfo)
OSError: [WinError 8] Not enough memory resources are available to process this command

1383 تم إنشاؤها. أوصي بشدة ببعض الاختبارات اليدوية قبل الدمج. ليس لدي 3.7.4 مثبتًا ، لذا لم أختبر التغيير على الإطلاق ، ولا أعرف ما هو الإصدار الثانوي من 3.7 CI قيد التشغيل حاليًا.

ربما يمكن لبعض الأشخاص الذين يبلغون عن المشكلة هنا اختبار التغيير والتأكد من أنه يصلح مشكلتهم ولا يقدم أي كسر آخر؟

إنه يعمل مع Python 3.7.4 على Travis CI! لا أرى أي قضايا جديدة.

هذا هو تكوين Travis الذي استخدمته للاختبار (الجزء ذي الصلة):

    - stage: test
      os: windows
      language: shell
      env: PATH=/c/Python37:/c/Python37/Scripts:$PATH
      before_install:
        - choco install python
        # python -m pip install virtualenv
        - pip install git+https://github.com/pypa/virtualenv
        - virtualenv $HOME/venv
        - source $HOME/venv/Scripts/activate

النتائج (الأجزاء ذات الصلة):

Progress: Downloading python 3.7.4... 100%
python3 v3.7.4 [Approved]
python3 package files install completed. Performing other installation steps.
Installing 64-bit python3...
python3 has been installed.
Installed to: 'C:\Python37'
...
16.31s$ pip install git+https://github.com/pypa/virtualenv
Collecting git+https://github.com/pypa/virtualenv
  Cloning https://github.com/pypa/virtualenv to c:\users\travis\appdata\local\temp\pip-req-build-ceb1gi36
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
    Preparing wheel metadata: started
    Preparing wheel metadata: finished with status 'done'
Building wheels for collected packages: virtualenv
  Building wheel for virtualenv (PEP 517): started
  Building wheel for virtualenv (PEP 517): finished with status 'done'
  Stored in directory: C:\Users\travis\AppData\Local\Temp\pip-ephem-wheel-cache-kx8oezso\wheels\8d\58\76\749812a30b0b5c5cdc1b327e343711660ee5ebf51cf56d2df5
Successfully built virtualenv
Installing collected packages: virtualenv
Successfully installed virtualenv-16.6.1
46.51s$ virtualenv $HOME/venv
Using base prefix 'c:\\python37'
New python executable in C:\Users\travis\venv\Scripts\python.exe
Installing setuptools, pip, wheel...
done.
0.16s$ source $HOME/venv/Scripts/activate

إنه يعمل مع Python 3.7.4 على Travis CI! لا أرى أي قضايا جديدة.

ممتاز ، شكرا للتأكيد

os: windows

لم أكن أدرك أن Travis قد وفرت بيئات Windows الآن ، وهذا مثير للاهتمام :-)

pfmoore يشددون على أن Windows "وصول مبكر" ولديه مشكلات (بشكل ملحوظ لا يمكنك استخدام الأسرار).

نعم ، تم طرح دعم Windows قبل حدوث أشياء #travisAlums مباشرةً ، IIRC (الشركة الأم الجديدة تقلصت فريق Travis بشكل كبير)

لدي هذا الرمز (في ملف virtualenv.py) لإصلاحه:
الأصل هو:
إذا hasattr (sys، "_base_executable"):
وتغيرت إلى:
إذا hasattr (sys، "_base_executable") وليس os.environ.get ("VIRTUALENV_INTERPRETER_RUNNING"):
من خلال القيام بذلك ، من شأنه إصلاح الحلقة

يجب إصدار الإصلاح عبر https://pypi.org/project/virtualenv/16.6.2/

تم اختباره للتو وتم إصلاحه بالفعل. شكرا جزيلا على الردود السريعة والجيدة لك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات