Virtualenv nasıl kopyalanır


132

Çok sayıda paket içeren mevcut bir sanal ortamım var, ancak Django'nun eski bir sürümü.

Yapmak istediğim, bu ortamı çoğaltmak , böylece aynı paketlere sahip başka bir ortamım var, ancak Django'nun daha yeni bir sürümü var. Bunu nasıl yapabilirim?


3
Tüm gereksinimlerinizi bir 'requirements.txt' dosyasına dondurup başka bir virtualenv oluşturup pip install requirements.txt dosyasını çalıştırırdım
Calvin Cheng

Kopyalamak istediğiniz sanal ortamın python sürümü varsayılan python ortamınızdan farklıysa, yeni ortamı olarak kurabilir virtualenv -p /path/to/older/venv/bin/python new_venvve daha sonra requirements.txtoluşturduğunuz ortamı kullanabilirsinizpip freeze
GiriB

Yanıtlar:


185

En kolay yol, bir gereksinimler dosyası oluşturmak için pip kullanmaktır. Gereksinimler dosyası temelde, kurmak istediğiniz (veya pip tarafından oluşturulan dosya durumunda zaten kurulmuş olan) tüm python paketlerinin ve hangi sürümlerde bulunduklarının bir listesini içeren bir dosyadır.

Bir gereksinim dosyası oluşturmak için orijinal sanal ortama gidin ve şunu çalıştırın:

pip freeze > requirements.txt

Bu sizin için requirements.txt dosyasını oluşturacaktır. Bu dosyayı favori metin düzenleyicinizde açarsanız, aşağıdaki gibi bir şey görürsünüz:

Django==1.3
Fabric==1.0.1
etc...

Şimdi, Django==x.xsöylenecek satırı Django==1.3(veya yeni virtualenv'inize yüklemek istediğiniz sürümü) düzenleyin .

Son olarak, yeni sanal ortamınızı etkinleştirin ve çalıştırın:

pip install -r requirements.txt

Ve pip, belirttiğiniz sürümler ne olursa olsun, gereksinimler.txt dosyanızda listelenen tüm python modüllerini otomatik olarak indirir ve kurar !


3
Teşekkür ederim! Google'da çalışırken çok fazla gürültülü, dağınık ve kafa karıştırıcı sayfa buldum ... Çözümünüz çok temiz ve basit ... günümü yaptı;)
dolma33

klasörü kopyalayıp başka bir makineye yapıştırırsam ne olur? Çalışır mı? Elbette apt-get bağımlılıklarının çözüldüğünü varsayarsak
Tales Pádua

Şu anda öğrendiğim gibi, aslında öyle değil.
horcle_buzz

Birçok mesaj görüyorum Could not find a version that satisfies the requirement a_package=#.#.#Kolayca çözebilir miyim? Bir çizgiyi kaldırdım ya da eşitliği eşitsizlikle değiştirdim.
Dünyayı değiştir

İçin pyenvde çalışıyor. Harika cevap.
Leonard

29

Diğer bir seçenek de virtualenv-clonepaketi kullanmaktır :

Yeniden konumlandırılamayan bir sanal ortamı klonlamak için bir komut dosyası.


Merhaba, bunun bir BÜTÜN python ortamını bir dosyaya kopyalamama izin verdiğini varsaymakta haklı mıyım? Sonra bu dosyayı yeni bir bilgisayara / işletim sistemine yüklemem gerekecek ve tüm site paketlerimi geri
yükleyecektim

2
"virtualenv-clone source / target /" bir cazibe gibi çalıştı, teşekkürler!
ajankuv

virtualenv-clonevirtualenv
4givN

15

virtualenvwrappervirtualenv'i çoğaltmak için bir komut sağlar

cpvirtualenv ENVNAME [TARGETENVNAME]

7
Pek iyi bir fikir değil. "Sanal ortamların kopyalanması iyi desteklenmiyor. Her virtualenv, içine sabit kodlanmış yol bilgisine sahiptir ve kopya kodunun belirli bir dosyayı güncellemesi gerektiğini bilmediği durumlar olabilir. Dikkatli kullanın."
Temak

6

Anaconda kullanıyorsanız, şunları çalıştırabilirsiniz:

conda create --name myclone --clone myenv

Bu, myenvadlı yeni oluşturulan ortama kopyalayacaktır myclone.


4

En kolay seçenek kullanıyor virtualenv-clone paket .

Kopyalamak venv1için venv2şu adımları izleyin:

  1. virtualenv-cloneYa venv1bir sanal ortama yükleyin venv_dummy. Oluşturmak için venv_dummy:

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
  2. Yüklemek için virtualenv-clone:

    (venv_dummy): pip install virtualenv-clone
  3. Kopyalamak venv1için venv2:

    (venv_dummy): virtualenv-clone venv1/ venv2/


@MrR .. bin/activatebu yanıtı takip ederseniz düzenlemeniz gerekmez . Neden düzenlemek zorundasın bin/activate?
Safvan

bin/activate
Klonladıktan

1
@MrR Bu, virtualenv-clone'da bir hata veya gözetim gibi geliyor, ancak davranışı gerçekten etkilememesi gereken biri.
Joe Holloway

1

Basitçe yapamaz mısın:

  • Mevcut sanal env dizinini yenisine kopyalayın
  • Yeni Django'ya güncelleme?

7
Bazen bu yaklaşımı kullanıyorum, ancak bin / activ betiğindeki bazı yolları güncelleme zahmetine giriyorum.
Armando Pérez Marqués

3
Değişiklik, env adına yapılan başvurularda basit bir bul ve değiştir mi yoksa bundan daha karmaşık mı?
Greg

1
Benim durumumda, bin / activ'deki VIRTUAL_ENV sabitindeki yolu güncellemek hile yaptı
bryanph

1
Öte yandan, bin / etkinleştir'i değiştirmek oldukça zordur ve bunun bir noktada bir şeyleri bozup bozamayacağını merak etmek gerekir. Özellikle üretim ayarlarında sanal ortamlar kullanıldığında.
Herbert

2
Bir çok şeyi bozuyor. Virtualenv'i yeniden oluşturmak veya klonlamak daha kolaydır. Sadece bunu yapmaya çalıştım (gerekli tüm paketleri yeniden yükleyebilmem ve sıfırdan başlayabilmem için bir proxy sunucusunun açılmasını beklerken) ve çalışmıyor! Zeki olduğumu düşünmüştüm, ama ne yazık ki, bunu çalıştırmak ve çalıştırmak için çok fazla hackleme gerekecek ve dürüst olmak gerekirse, yapılacak çok daha iyi şeyler var.
horcle_buzz
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.