Virtualenv'ler nerede oluşturulmalıdır?


107

Sanal ortamlarımı nereye koymam gerektiği konusunda kafam karıştı.

İlk django projemle projeyi şu komutla oluşturdum:

django-admin.py startproject djangoproject

Sonra djangoproject dizinine cd yazdım ve komutu çalıştırdım

virtualenv env

sanal ortam dizinini iç djangoprojectdizinle aynı seviyede oluşturan .

Bu belirli proje için virtualenv'i oluşturmak için burası yanlış yer mi?

Çoğu insanın tüm sanal ortamlarını tamamen farklı bir dizinde bir arada tuttuğu izlenimine kapılıyorum, örneğin ~/virtualenvs, ve daha sonra aralarında geçiş yapmak için virtualenvwrapper'ı kullanıyor.

Bunu yapmanın doğru bir yolu var mı?

Yanıtlar:


128

Birçok kişi , tüm virtualenv'leri aynı yerde ( dizin) tutan ve bunları oluşturmak ve orada tutmak için kısayollara izin veren virtualenvwrapper aracını kullanır ~/.virtualenvs. Örneğin şunları yapabilirsiniz:

mkvirtualenv djangoproject

ve sonra:

workon djangoproject

Dağıtmak istemediğiniz için virtualenv dizinini projenin kendisinde tutmak muhtemelen kötü bir fikirdir (bilgisayarınıza veya işletim sisteminize özgü olabilir). Bunun yerine, pip kullanarak bir requirements.txt dosyası tutun :

pip freeze > requirements.txt

ve bunu dağıtın. Bu, projenizi kullanan diğer kişilerin aynı gereksinimleri sanal ortamlarına şu şekilde yeniden yüklemelerine olanak tanır:

pip install -r requirements.txt

güzel, pip işlerine hiç bakmamıştım ama bir gün gerekirse bu işe yarayacak
Joran Beasley

pip, Django topluluğunda çok popülerdir ve kullanımı çok kolaydır.
David Robinson

Teşekkürler David, ben de öyle düşündüm. Gereksinimler konusunu biliyordum ve bunu yapıyorum. Venv'in nereye gitmesi gerektiğinden emin değildim. İşletim sistemine özel olduğu hakkındaki yorumunuz, önerdiğiniz şeyi yapmak için iyi bir gerekçedir.
Ray

Oluşturulduktan sonra sanal ortamı taşımak mümkün müdür? Farkında olmadan proje dizinimin içine koydum
James Wierzba

6
IMO için büyük bir gerekçe değil. .Gitignore bunun için değil mi?
Josh Noe

24

Virtualenv dizininin konumunu değiştirmek onu bozar

Bu altında depo ağacın, örneğin dizin dışında etmenin bir avantajdır ~/.virtualenvsile virutalenvwrapper.

Aksi takdirde, proje ağacında tutarsanız, proje konumunu taşımak sanal ortamı bozar.

Bakınız: Bir virtualenv klasörünü bozmadan yeniden adlandırma

Var --relocatableama mükemmel olmadığı biliniyor.

Başka bir küçük avantaj: buna gerek yok .gitignore.

Proje ağacının kendisine gitignored koymanın avantajları şunlardır:

  • ilgili şeyleri birbirine yakın tutar.
  • Muhtemelen belirli bir sanal ortamı projeler arasında asla yeniden kullanmayacaksınız, bu nedenle onu başka bir yere koymak pek bir avantaj sağlamaz

3
Proje ağaçlarının dışında sanalenv klasörleri oluşturmak için gördüğüm tek makul argüman bu! Diğer rehberlik, sanki sanal ortamların temelden bozulduğu için talihsiz bir uzlaşma yerine, doğası gereği bir en iyi uygulamamış gibi (oldukça yararlı olsa da!) 'Merkezileştirme' dogmasını tekrar ediyor gibi görünüyor.
rob3c

Üzgünüm, benim için net olmayan bir şey var, bu yüzden onu proje ağacında oluşturmayı ve sonra onu "gitignoring" mi yoksa ~ / .virtualenvs içinde oluşturmayı mı öneriyorsun? "Bunun için olmasaydı" neyi kastediyor?
aderchox

1
@aderchox bir değiş tokuş var: onu proje ağacına koyun ve ağaç, yeniden yüklemeniz veya yerleştirmeniz gereken ağaç hareketleri ~ ama proje dışındaki ekstra alt dizinde yönetin.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功


0

Eğer kullanırsanız pyenv install Python, o zaman pyenv-Virtualenv en iyi yöntem olacaktır. .python-versionDosya ayarlanmışsa , çalışma klasörünü değiştirdiğinizde sanal envanteri otomatik olarak etkinleştirebilir veya devre dışı bırakabilir. Pyenv-virtualenvayrıca tüm sanal ortamları da $HOME/.pyenv/versionsklasöre koyun .


0

Kişisel deneyimlerime göre, tüm sanal ortamları tek bir dizinde düzenlemenizi tavsiye ederim. Birisi son derece keskin bir belleğe sahip olmadığı ve dosya sistemine dağılmış dosyaları / klasörleri hatırlayamadığı sürece. Diğer araçları sadece sanal ortamları yönetmek için kullanmanın büyük bir hayranı değil. VSCode'da python.venvPathtüm sanal ortamları içeren configure ( ) dizinini yaparsam , hepsini otomatik olarak tanıyabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.