Virtualenv: Pembuatan py3 venv gagal saat virtualenv aktif

Dibuat pada 22 Okt 2017  ·  12Komentar  ·  Sumber: pypa/virtualenv

Jika pengguna mencoba membuat python 3 "venv" saat bekerja di bawah "virtualenv" yang aktif, lingkungan virtual yang dihasilkan tidak akan dibuat dengan benar.

Seperti yang Anda lihat di bawah, lingkungan venv dan virtualenv keduanya dibuat dengan modul "venv" python 3. Namun, yang terakhir dibuat di bawah outer virtualenv aktif, dan kehilangan sejumlah binari serta isi direktori paket situsnya. python -m pip berfungsi.

Mendirikan:

[vagrant@vagrant-arch ~]$ python3.6 -m venv venv
[vagrant@vagrant-arch ~]$ virtualenv -p python3.6 outer
[vagrant@vagrant-arch ~]$ source outer/bin/activate
(outer) [vagrant@vagrant-arch ~]$ python -m venv virtualenv

bin isi:

[vagrant@vagrant-arch ~]$ ls venv/bin/
activate  activate.csh  activate.fish  easy_install  easy_install-3.6  pip  pip3  pip3.6  python  python3  python3.6

[vagrant@vagrant-arch ~]$ ls virtualenv/bin/
activate  activate.csh  activate.fish  python  python3

site-packages isi:

[vagrant@vagrant-arch ~]$ ls venv/lib/python3.6/site-packages/
__pycache__  easy_install.py  pip  pip-9.0.1.dist-info  pkg_resources  setuptools  setuptools-28.8.0.dist-info

[vagrant@vagrant-arch ~]$ ls virtualenv/lib/python3.6/site-packages/
[vagrant@vagrant-arch ~]$ 
bug enhancement help-wanted

Komentar yang paling membantu

Saya menduga perbaikan diperlukan dari sisi venv untuk melakukan tarian .real_prefix .

Tidak jelas bagi saya siapa yang harus bertanggung jawab atas perbaikan tersebut. Haruskah venv mendeteksi bahwa ia sedang dijalankan dari dalam virtualenv , atau haruskah virtualenv membuat lingkungan yang kompatibel dengan venv ? Di satu sisi, virtualenv sebelum venv . Di sisi lain, venv adalah bagian dari pustaka standar.

Terlepas dari itu, inilah solusi yang saat ini saya miliki di tox-venv:

https://github.com/tox-dev/tox-venv/blob/58401663fda66dfba4f344553525c73d57432d5e/src/tox_venv/hooks.py#L10 -L49

Deteksi jalur yang dapat dieksekusi dapat ditingkatkan, karena saat ini hanya mencari python3 . misalnya, Anda mungkin ingin python3.6 , tetapi python3 menunjuk ke python3.4 .

Semua 12 komentar

Ternyata python -m pip "berfungsi", namun ia menginstal paket ke virtualenv asli.

(outer) [vagrant@vagrant-arch ~]$ deactivate 
[vagrant@vagrant-arch ~]$ source virtualenv/bin/activate
(virtualenv) [vagrant@vagrant-arch ~]$ python -m pip install tox

Apakah venv aktif, harus mengandung racun

(virtualenv) [vagrant@vagrant-arch ~]$ ls virtualenv/lib/python3.6/site-packages/
(virtualenv) [vagrant@vagrant-arch ~]$ ls virtualenv/bin/
activate  activate.csh  activate.fish  python  python3

Tapi tox diinstal ke virtualenv asli

(virtualenv) [vagrant@vagrant-arch ~]$ ls outer/lib/python3.6/site-packages/
__pycache__      pip                  pkg_resources  pluggy-0.5.2.dist-info  py-1.4.34.dist-info  setuptools-36.6.0.dist-info  six.py  tox-2.9.1.dist-info          virtualenv.py       wheel
easy_install.py  pip-9.0.1.dist-info  pluggy         py                      setuptools           six-1.11.0.dist-info         tox     virtualenv-15.1.0.dist-info  virtualenv_support  wheel-0.30.0.dist-info
(virtualenv) [vagrant@vagrant-arch ~]$ ls outer/bin 
activate  activate.csh  activate.fish  activate_this.py  easy_install  easy_install-3.6  pip  pip3  pip3.6  python  python-config  python3  python3.6  tox  tox-quickstart  virtualenv  wheel

Saya sudah mencoba membuat venv serupa dengan opsi --copies , tetapi tidak berpengaruh.

Melakukannya di sini juga: https://github.com/pre-commit/pre-commit/issues/755

Saya menduga diperlukan perbaikan dari sisi venv untuk melakukan tarian .real_prefix . Saya akan menyelidiki pendekatan itu sebagai solusi untuk kepentingan pre-commit

Tampaknya ini adalah masalah bpo: https://bugs.python.org/issue30811

Saya menduga perbaikan diperlukan dari sisi venv untuk melakukan tarian .real_prefix .

Tidak jelas bagi saya siapa yang harus bertanggung jawab atas perbaikan tersebut. Haruskah venv mendeteksi bahwa ia sedang dijalankan dari dalam virtualenv , atau haruskah virtualenv membuat lingkungan yang kompatibel dengan venv ? Di satu sisi, virtualenv sebelum venv . Di sisi lain, venv adalah bagian dari pustaka standar.

Terlepas dari itu, inilah solusi yang saat ini saya miliki di tox-venv:

https://github.com/tox-dev/tox-venv/blob/58401663fda66dfba4f344553525c73d57432d5e/src/tox_venv/hooks.py#L10 -L49

Deteksi jalur yang dapat dieksekusi dapat ditingkatkan, karena saat ini hanya mencari python3 . misalnya, Anda mungkin ingin python3.6 , tetapi python3 menunjuk ke python3.4 .

Saya memilih solusi serupa: https://github.com/pre-commit/pre-commit/blob/805a2921ad0d34698433972c6fcb1a6dca47191d/pre_commit/languages/python_venv.py#L13 -L39

(Perbedaan utama adalah pra-komit sudah melakukan normalisasi jadi saya menggunakan bin/$(basename exe) alih-alih hanya bin/python3 )

Eh, ya secara keseluruhan saya merasa kita harus kompatibel dengan venv.

@gaborbernat Menurut berdario / pew # 173, tampaknya bukan itu masalahnya. @uranusjr Mau ikut campur ?

Masalah ini secara otomatis ditandai sebagai usang karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut. Cukup tambahkan komentar jika Anda ingin tetap membukanya. Terima kasih atas kontribusi Anda.

1343

@gaborbernat Saya rasa masalah ini harus diubah namanya menjadi "menjalankan venv di dalam virtualenv" untuk membedakannya dari # 1339.

@FranklinYu apakah judul yang diperbarui cukup?

Ini menjadi usang dengan # 1366 sekarang dalam ayunan penuh.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat