Virtualenv ve pyenv arasındaki ilişki nedir?


175

Yakın zamanda iş akışımda virtualenv ve virtualenvwrapper'ın nasıl kullanıldığını öğrendim, ancak birkaç kılavuzda bahsedilen pyenv'i gördüm, ancak pyenv'in ne olduğunu ve virtualenv'e nasıl farklı / benzer olduğunu anlayamıyorum. Pyenv, virtualenv veya ücretsiz bir araç için daha iyi / yeni bir alternatif mi? İkincisi farklıysa ne yapar ve ikisi (ve eğer varsa virtualenvwrapper) birlikte nasıl çalışır?


3
fgimian.github.io/blog/2014/04/20/… : Bununla birlikte, pyenv adı verilen ve bazı önemli avantajları olan başka bir alternatif var .
Martijn Pieters

11
Benim gibi olmayın ve pyenvkafanız pyvenv
Kullanıcı

Yanıtlar:


162

Pyenv ve virtualenv , farklı şeyler yapmak için farklı şekillerde çalışan çok farklı araçlardır:

  • Pyenv , python, pip vb. Çağrılarınızı sistem python araç zincirlerinden birine yönlendirmek için Windows'da çalışmayan bir bash uzantısıdır. Bu nedenle, seçilen python sürümüne yüklediğiniz tüm kitaplıklara her zaman sahip olursunuz - bu nedenle python'un farklı sürümleri arasında geçiş yapmak zorunda olan kullanıcılar için iyidir.

  • VirtualEnv , saf python yani her yerde çalışır, isteğe bağlı olarak python ve pip'in geçerli bir sürümünün , geçerli sistem araç zincirine bağlantılar içerebilir veya içermeyebilir yalnızca bilinen bir kitaplık alt kümesini bu ortama yükleyin. Bildiğiniz gibi gibi neredeyse kesinlikle çok daha iyi test ve dağıtım için ise tam kütüphaneler, hangi versiyonları, kullanıldıkları ve küresel değişim Modülünüzü etkilemez.

venv python> 3.3

Python 3.3'ten itibaren venv adı verilen bir VirtualEnv uygulaması vardır (bazı kurulumlarda pyvenv adı verilen bir sarıcı ile - bu sarıcı Python 3.6'da kullanımdan kaldırılmıştır ), ki bu muhtemelen tercih edilmelidir. Sarıcı ile olası sorunları önlemek için, doğrudan kullanarak doğrudan kullanmak iyi bir fikirdir /path/to/python3 -m venv desired/env/pathveya pyWindows ile mükemmel python seçiciyi kullanabilirsiniz py -3 -m venv desired/env/path. desired/env/pathConfigure betiği ile belirtilen dizini oluşturur ve uygun şekilde doldurur. Genelde VirtualEnv kullanmaya çok benzer.

Ek Araçlar

Yukarıdakilerden bir veya daha fazlasının kullanımına yardımcı olabileceğinden, bahsetmeye ve düşünmeye değer bir dizi araç vardır:

  • VirtualEnvWrapper VirtualEnv - Cross Platformunun kullanımını ve yönetimini yönetin ve basitleştirin .
  • pyenv-virtualenv , VirtualEnv'i yönetmek ve arayüz oluşturmak için PyEnv araçları veren pyenv- installerv tarafından kurulur - bununla birlikte python'un birden fazla sürümünü içeren ve her birinde izole ortamlar yaratan bir temel kurulumuna sahip olabilirsiniz - Linux / OS- X . Önerilen Johann Visagie
  • PyInstaller , muhtemelen VirtualEnv altında geliştirilen ve test edilen python kodunuzu alabilir ve python sürümünüzün yüklü olmadığı bir platform çalıştırabilmesi için paketleyebilir - Bir çapraz derleyici olmadığını unutmayın, Windows'a ihtiyacınız olacaktır (sanal -) Windows yüklemeleri, vb. oluşturmak için makine, ancak python'un yükleneceğinden emin olabileceğiniz yerlerde bile kullanışlı olabilir, ancak python ve tüm kütüphanelerin sürümünün kodunuzla uyumlu olduğundan emin olamazsınız.

3
Muhtemelen pyenv ve virtualenv'in sorunsuz bir şekilde birlikte çalışmasına izin veren bir pyenv eklentisi olan pyenv-virtualenv'den bahsetmeye değer. Pyenv'i pyenv-installer kullanarak kurduysanız, pyenv-virtualenv zaten mevcut olacaktır. * github.com/yyuu/pyenv-virtualenv * github.com/yyuu/pyenv-installer
wjv

1
Peki ya venvşimdi standart kütüphanede?
17'de

@Flimm: python 3.3'ten itibaren venv, standart kütüphanenin bir parçasıdır ve genellikle "sanalenv doğru yapılır" olarak tanımlandığı için virtualenv yerine kullanılmalıdır - reddit.com/r/learnpython/comments/4hsudz/pyvenv_vs_virtualenv
Steve Barnes

2
pyenv-virtualenv yalnızca linux değildir (veya en azından artık değildir). MacOS'ta kolay kurulum için bunun için bir homebrew paketi var.
çevirin

Birlikte çalışabilirliği vurguladığınız için teşekkür ederiz!
HashRocketSyntax

16

virtualenvörneğin projenizin bir alt dizininde özel bir Python yüklemesi oluşturmanıza olanak tanır. Böylece projelerinizin her biri kendi pythonsanal ağı altında kendi (hatta birkaç tane) olabilir. Bazı sanal bilgisayarların aynı sürümde python(örn. 2.7.16) çatışma olmadan bile olması gayet iyi - ayrı yaşıyorlar ve birbirlerini bilmiyorlar. Bunlardan herhangi birini kullanmak istiyorsanız python, bunu yapmanız gerekir activate( PATHsanalenv bin/dizininin önce gelmesini sağlamak için geçici olarak değiştirecek bir komut dosyası çalıştırarak ). Bu noktadan sonra, python(veya pipvb.) Çağrısı, siz sanallaşana kadar deactivate(bu da geri yüklenir) sanalenv sürümünü çağırır PATH.

pyenvdaha geniş bir ölçekte çalışır virtualenv- Python kurulumlarının bir kaydını tutar (ve yenilerini yüklemek için kullanılabilir) ve pythonkomutu kullandığınızda hangi Python sürümünün çalıştırılacağını yapılandırmanıza izin verir . Kulağa benzer geliyor ama pratik kullanım biraz farklı. Şim pythonbetiğini PATH(kalıcı olarak) başınıza ekleyerek ve ardından hangi "gerçek" in çağırılacağına karar vererek çalışır python. Hatta pyenv'i sanal pyenv-virtualenveklenti pitonlarınızdan birine çağrılacak şekilde yapılandırabilirsiniz ( eklentiyi kullanarak ). Kullanarak yüklediğiniz Python sürümleri dizinine pyenvgider $(pyenv root)/versions/(varsayılan olarak, pyenv kökü ~ / .pyenv'dir), bu yüzden virtualenv'den daha 'global' dir. Normalde, yüklü Python sürümlerini çoğaltamazsınız pyenv, en azından bunu yapmak ana fikir değildir.

Belirli bir Python sürümüne sahip bir sanal ağ oluşturmak için, söz konusu sürümün sisteminizde (ister açık ister kapalı olsun) bir yere sahip olması PATHve aslında yeni oluşturulan sanal ağınıza kopyalamanız gerekir. Tabii ki, belirli bir sürümü elde etmenin bir yolu onu yüklemek pyenv. Bu yapıldıktan sonra, her bir sanal sanal veri farklı modüllerin (ya da bunların sürümlerinin) takılı olmasıyla ayrışmakta serbesttir.

Kısacası:

  • virtualenv mevcut olanlardan klonlayarak yerel, bağımsız python kurulumları oluşturmanıza olanak tanır
  • pyenv python'un farklı sürümlerini aynı anda (sistem çapında veya sadece yerel kullanıcı için) yüklemenize ve daha sonra belirli bir zamanda (virtualenv veya Anaconda tarafından oluşturulanlar da dahil olmak üzere) çok sayıda pitonun hangisinin çalıştırılacağını seçmenize olanak tanır
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.