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
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
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.
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.