Di mana virtualenv harus dibuat?

107

Saya bingung ke mana saya harus meletakkan virtualenv saya.

Dengan proyek django pertama saya, saya membuat proyek dengan perintah

django-admin.py startproject djangoproject

Saya kemudian masuk ke direktori djangoproject dan menjalankan perintah

virtualenv env

yang membuat direktori lingkungan virtual pada tingkat yang sama dengan djangoprojectdirektori dalam .

Apakah ini tempat yang salah untuk membuat virtualenv untuk proyek khusus ini?

Saya mendapat kesan bahwa kebanyakan orang menyimpan semua virtualenv mereka bersama-sama dalam direktori yang sama sekali berbeda, misalnya ~/virtualenvs, dan kemudian menggunakan virtualenvwrapper untuk beralih di antara mereka.

Apakah ada cara yang benar untuk melakukan ini?

sinar
sumber

Jawaban:

128

Banyak orang menggunakan alat virtualenvwrapper , yang menyimpan semua virtualenv di tempat yang sama ( ~/.virtualenvsdirektori) dan memungkinkan pintasan untuk membuat dan menyimpannya di sana. Misalnya, Anda dapat melakukan:

mkvirtualenv djangoproject

dan kemudian:

workon djangoproject

Mungkin ide yang buruk untuk menyimpan direktori virtualenv dalam proyek itu sendiri, karena Anda tidak ingin mendistribusikannya (ini mungkin khusus untuk komputer atau sistem operasi Anda). Sebagai gantinya, pertahankan file persyaratan.txt menggunakan pip :

pip freeze > requirements.txt

dan mendistribusikannya. Ini akan memungkinkan orang lain menggunakan proyek Anda untuk menginstal ulang semua persyaratan yang sama ke virtualenv mereka dengan:

pip install -r requirements.txt
David Robinson
sumber
bagus Saya belum pernah melihat ke dalam pip tetapi jika saya perlu suatu hari ini akan berguna
Joran Beasley
pip sangat populer di komunitas Django dan sangat mudah digunakan.
David Robinson
Terima kasih David, itulah yang saya pikirkan. Saya tahu tentang persyaratan dan saya melakukannya. Aku hanya tidak yakin kemana perginya venv. Komentar Anda tentang hal itu menjadi khusus OS adalah pembenaran yang baik untuk melakukan apa yang Anda sarankan.
Ray
Apakah mungkin untuk memindahkan lingkungan virtual setelah dibuat? Saya tanpa sadar memasukkannya ke dalam direktori proyek saya
James Wierzba
6
Bukan IMO pembenaran yang bagus. Bukankah ini gunanya .gitignore?
Josh Noe
24

Mengubah lokasi direktori virtualenv akan merusaknya

Ini adalah salah satu keuntungan meletakkan direktori di luar pohon repositori, misalnya di bawah ~/.virtualenvsdengan virutalenvwrapper.

Jika tidak, jika Anda menyimpannya di pohon proyek, memindahkan lokasi proyek akan merusak virtualenv.

Lihat: Mengganti nama folder virtualenv tanpa merusaknya

Ada --relocatabletetapi diketahui tidak sempurna.

Keuntungan kecil lainnya: Anda tidak perlu melakukannya .gitignore.

Keuntungan meletakkannya di pohon proyek itu sendiri adalah:

  • menjaga hal-hal terkait tetap dekat.
  • Anda mungkin tidak akan pernah menggunakan kembali virtualenv tertentu di seluruh proyek, jadi meletakkannya di tempat lain tidak memberikan banyak keuntungan
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber
3
Ini adalah satu-satunya argumen masuk akal yang pernah saya lihat untuk membuat folder virtualenv di luar pohon proyek! Panduan lain sepertinya mengulangi dogma 'sentralisasi' seolah-olah itu secara inheren merupakan praktik terbaik alih-alih kompromi yang tidak menguntungkan karena virtualenvs secara fundamental rusak (meskipun cukup berguna!).
rob3c
Maaf, ada sesuatu yang tidak jelas bagi saya, jadi apakah Anda merekomendasikan untuk membuatnya di pohon proyek dan kemudian "mengabaikan" atau membuatnya di ~ / .virtualenvs? Apa yang dimaksud dengan "Jika bukan karena itu"?
aderchox
1
@aderchox ada tradeoff: letakkan di pohon proyek dan pohon itu bergerak Anda harus menginstal ulang, atau meletakkannya di ~ tetapi mengelola pada subdir tambahan di luar proyek.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
5

Tempat yang diterima secara umum untuk meletakkannya adalah tempat yang sama dengan instalasi default virtualenvwrapper: ~/.virtualenvs

Terkait: virtualenvwrapper adalah alat luar biasa yang menyediakan singkatan untuk perintah virtualenv umum. http://www.doughellmann.com/projects/virtualenvwrapper/

Emmett Butler
sumber
0

Jika Anda menggunakan pyenv install Python, maka pyenv-virtualenv akan menjadi praktik terbaik. Jika mengatur .python-versionfile, itu dapat secara otomatis mengaktifkan atau menonaktifkan virtual env ketika Anda mengubah folder kerja. Pyenv-virtualenvjuga masukkan semua virtual env ke dalam $HOME/.pyenv/versionsfolder.

Aston
sumber
0

Dari pengalaman pribadi saya, saya akan merekomendasikan untuk mengatur semua lingkungan virtual dalam satu direktori tunggal. Kecuali seseorang memiliki memori yang sangat tajam dan dapat mengingat file / folder yang tersebar di seluruh sistem file. Bukan penggemar berat menggunakan alat lain hanya untuk mengatur lingkungan virtual. Dalam VSCode jika saya mengkonfigurasi ( python.venvPath) direktori yang berisi semua lingkungan virtual, secara otomatis dapat mengenali semuanya.

Tejas Sarade
sumber