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 ~]$
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:
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.
@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.
Komentar yang paling membantu
Tidak jelas bagi saya siapa yang harus bertanggung jawab atas perbaikan tersebut. Haruskah
venv
mendeteksi bahwa ia sedang dijalankan dari dalamvirtualenv
, atau haruskahvirtualenv
membuat lingkungan yang kompatibel denganvenv
? Di satu sisi,virtualenv
sebelumvenv
. 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 inginpython3.6
, tetapipython3
menunjuk kepython3.4
.