Virtualenv: ratusan proses muncul

Dibuat pada 9 Jul 2019  ·  31Komentar  ·  Sumber: pypa/virtualenv

Setelah menginstal python 3.7.4 64 bit, saya mencoba memulai lingkungan virtual di folder. Namun, sekitar seribu proses python dimulai dan lingkungan virtual tidak selesai.

OS: Windows 10 Rumah
Kode dijalankan di Cygwin 64 bit

Kode gagal:

mkdir test
cd test
virtualenv venv

pip list

Versi Paket


asteroid 2.2.0
colorama 0.4.1
urut 4.3.9
malas-objek-proxy 1.3.1
mccabe 0.6.1
pip 19.1.1
tiang 2.3.0
tali 0.14.0
setuptools 40.8.0
enam 1.12.0
diketik-ast 1.3.1
virtualenv 16.6.1
bungkus 1.11.1

Komentar yang paling membantu

Pemelihara di sini. Seperti yang saya katakan di atas kontrak untuk beberapa variabel internal CPython berubah, dan ini menyebabkan loop tak terbatas pada pembuatan proses untuk python 3.7 dan 3.8.

Semua 31 komentar

Saya mencoba menginstal python, pip dan virtualenv untuk pertama kalinya hari ini dan menghadapi masalah yang sama.

Saya sudah memperbaikinya dengan berkomentar 3 baris di
Python\Python37\Lib\site-packages\virtualenv.py
dan menambahkan
-p python
saat menjalankan virtualenv

Baris yang saya komentari adalah 783-785:
if hasattr(sys, "_base_executable"):
print("hasattr(sys, \"_base_executable\") == yes")
return sys._base_executable

@AndrYast setelah mengaktifkan lingkungan apakah Anda masih menggunakan 3.7.4? Ini sepertinya menjadi masalah khusus dengan 3.7.4, yang dirilis kemarin (7/8/19).

@thingselliotprograms ya, berjalan
venv\Scripts\activate
python --version
memberi saya
Python 3.7.4

Mengalami masalah yang sama dengan pipenv hang sejak memutakhirkan python kemarin ke 3.7.4. Masalah mendasar terkait dengan virtualenv. Python diturunkan ke 3.7.3 untuk saat ini.

Ack virtualenv terbaru rusak karena https://github.com/python/cpython/pull/14428 selalu menetapkan sys._base_executable .

Saya mendapatkan masalah yang sama dengan 3.7.4. Saya menggunakan pipenv dan mendapatkan [WinError 8] Not enough memory resources are available to process this command . Saya tidak dapat membuat virtualenv apa pun. Semuanya bekerja dengan baik di 3.7.3.

Saya mengalami masalah persis ini juga, dengan 3.7.4.

Rolling guntur proses python.exe menghabiskan memori dan pembuatan virtualenv akhirnya gagal.

Masalahnya tidak ada dengan 3.7.2.

Pemelihara di sini. Seperti yang saya katakan di atas kontrak untuk beberapa variabel internal CPython berubah, dan ini menyebabkan loop tak terbatas pada pembuatan proses untuk python 3.7 dan 3.8.

Tidak tahu apakah ini ide _baik_, tetapi saya dapat membuat lingkungan virtual dengan peretasan cepat ini.

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

Dilihat dari komentar di atas baris itu, sepertinya Anda bersenang-senang di versi sebelumnya.

Mungkin perlu ada pemeriksaan tambahan yang sys._base_executable != sys.executable . Tapi sejujurnya, saya tidak tahu - ini tampaknya terus berubah dalam rilis tambalan dan saya tidak punya waktu untuk mengikuti apa yang terjadi (semuanya tampaknya terkait dengan pekerjaan untuk mendukung pembuatan "Windows Store" dari Python).

Mungkin @zooba bisa berkomentar atau memberikan saran di sini. Kami menggunakan internal yang tidak berdokumen, jadi pada akhirnya masalahnya terserah kami untuk diatasi, tetapi saya tidak tahu cara yang didukung untuk mendapatkan informasi yang kami butuhkan, jadi saya tidak melihat solusi yang tidak akan tunduk pada potensi kerusakan setiap kali kami mendapatkan rilis baru Python :-(

Pada akhirnya, #1377 mungkin satu-satunya solusi yang dapat diandalkan di sini.

Saya pikir selama kita menambahkan cek itu, kita akan baik-baik saja.

Pekerjaan Travis CI menjalankan Windows dan mencoba membuat virtualenv juga gagal. Travis CI baru-baru ini pindah ke 3.7.4. 😞

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

Informasi yang mungkin berguna dari bangunan Travis:

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

Saya pikir selama kita menambahkan cek itu, kita akan baik-baik saja.

Tidakkah melakukan itu akan memperkenalkan kembali (pada 3.7.4) masalah yang ingin diperbaiki oleh pemeriksaan base_executable? Memang masalah itu jauh lebih serius, jadi sepertinya masih layak dilakukan, tapi saya pikir itu bukan solusi lengkap.

Saya tidak berpikir itu menyebabkan regresi, bukan?

Saya belum menguji satu atau lain cara (dan tidak akan punya waktu, maaf).

Apa kesimpulannya di sini, apakah rilis perbaikan mungkin untuk virtualenv?

Iya kalo ada yg bikin PR sama fixnya

Apakah Anda memiliki tes untuk regresi yang Anda sebutkan?

Saya pikir kita lakukan.

Tes yang relevan (ditambahkan di #1345) adalah test_create_environment_from_venv - tetapi perhatikan bahwa tes tersebut perlu dijalankan di semua Python 3.7.2, 3.7.3 dan 3.7.4 karena perilakunya berbeda di masing-masing ( minor), dan itu bukan sesuatu yang akan dibahas oleh CI, sejauh yang saya tahu.

Terima kasih atas perbaikan cepat di sekitar orang-orang, saya percaya membandingkan base_executable dengan executable memberikan fungsi yang setara dengan hanya memeriksa keberadaan atribut _base_executable (mungkin bahkan lebih aman karena itu sedikit lebih eksplisit)

Saya ingin tahu apa yang menyebabkan masalah ini sejak awal.

Anda perlu mendapatkan sistem python untuk membuat lingkungan virtual. Mencoba membuat lingkungan virtual dengan paket venv atau virtualenv tidak akan berhasil.

Sebelumnya sys._base_executable diset pada python 3.7+ hanya jika kita tidak berada di sistem python. Ini berubah dengan PR di atas untuk selalu disetel (jika Python non-sistem akan sama dengan sys.executable ). Perubahan menyederhanakan kode bawaan untuk CPython (di bagian pustaka standar sistem dan penemuan paket situs), maka perubahannya, tetapi ini adalah perubahan kontrak. Dikatakan demikian karena itu adalah atribut pribadi, perubahan itu tidak dianggap melanggar jadi tidak apa-apa. Kemudian lagi kami tidak bisa mendapatkan informasi ini dari tempat lain jadi kami mengandalkan bidang pribadi ini.

Python 3.7.4
Memiliki masalah yang sama, memposting output kami jika itu akan membantu:

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 dibuat. Saya akan sangat menyarankan beberapa pengujian manual sebelum menggabungkan. Saya belum menginstal 3.7.4 jadi saya belum menguji perubahan sama sekali, dan saya tidak tahu versi minor 3.7 CI apa yang sedang berjalan.

Mungkin beberapa orang yang melaporkan masalah di sini dapat menguji perubahan dan mengonfirmasi bahwa itu memperbaiki masalah mereka dan tidak menimbulkan kerusakan lain?

Ia bekerja dengan Python 3.7.4 di Travis CI! Saya tidak melihat masalah baru.

Ini adalah konfigurasi Travis yang saya gunakan untuk pengujian (bagian yang relevan):

    - 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

Hasil (bagian yang relevan):

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

Ia bekerja dengan Python 3.7.4 di Travis CI! Saya tidak melihat masalah baru.

Luar biasa, terima kasih atas konfirmasinya

os: windows

Saya tidak menyadari Travis menyediakan lingkungan Windows sekarang, itu menarik :-)

@pfmoore Mereka menekankan bahwa Windows adalah "akses awal" dan memiliki masalah (secara signifikan Anda tidak dapat menggunakan rahasia).

Ya, dukungan Windows diluncurkan tepat sebelum #travisAlums terjadi IIRC (perusahaan induk baru secara drastis menyusutkan tim Travis)

Saya memiliki kode ini (dalam file virtualenv.py) untuk memperbaikinya:
asal adalah:
jika hasattr(sys, "_base_executable"):
dan diubah menjadi:
jika hasattr(sys, "_base_executable") dan bukan os.environ.get("VIRTUALENV_INTERPRETER_RUNNING"):
dengan melakukan ini, akan memperbaiki loop

Perbaikan harus dirilis melalui https://pypi.org/project/virtualenv/16.6.2/

Baru saja diuji dan memang sudah diperbaiki. Terima kasih banyak atas respon yang cepat dan baik.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat