Python çalışma ortamı başka bir makineye nasıl kopyalanır?


26

İş istasyonumda Python (Anaconda + Flask) ile bir makine öğrenme modeli geliştirdim ve her şey yolunda gitti. Daha sonra, bu programı elbette aynı ortamı kurmaya çalıştığım başka bir makineye göndermeye çalıştım, ancak program çalışmadı. Programı sorunsuzca çalıştığı diğer makinelere de kopyaladım.

Sorunun arızalı durumda ne olduğunu çözemiyorum (hem program kodu hem de hata mesajı çok fazla, bu yüzden onları burada sunamıyorum) ancak bağımlılıkların farklı sürümleriyle ilgili bir şey olduğundan neredeyse eminim .

Öyleyse sorum şu ki, belli bir programın iyi çalıştığı bir ortam göz önüne alındığında, onu da iyi çalışması gereken bir yere nasıl klonlayabilirim? Tabii ki, tam sistem klonlama olmadan;)


Conda env ihracatını kullanın.
kbrose

Yanıtlar:


39

Her şeyden önce bu bir Python / Anaconda sorusudur ve muhtemelen farklı bir borsanın alt sitesinde sorulmalıdır.


Sorunun kendisine gelince, Anaconda ortamınızı aşağıdakileri kullanarak dışa aktarabilirsiniz:

conda env export > environment.yml

Ve kullanarak yeniden oluşturun:

conda env create -f environment.yml

Diğerlerinin önerdiği gibi, makinenizden ayrı bir ortam oluşturmanızı ve onu daha kolay yönetmenizi sağlayan sanal ortamları kullanmanız gerektiğini lütfen unutmayın.

Anaconda'da sanal bir ortam oluşturmak için şunları kullanabilirsiniz:

conda create -n yourenvname python=x.x anaconda

kullanarak etkinleştirdiğiniz:

source activate yourenvname

Anaconda belgeleri, kullanılıp kullanılmayacağı conda createveya conda env createbir ortamı paylaşırken / yeniden yaratırken çok açık değildir . conda env createBu durumda neden kullanılmasını önerdiğinizi daha ayrıntılı olarak açıklayabilir misiniz ?
Tanguy,

Buradaki conda createve arasındaki farkla ilgili bazı notlar bulabilirsiniz conda env create: groups.google.com/a/continuum.io/forum/#!topic/conda/… Bu, onları genellikle birbirinin yerine kullanabileceğinizi düşünüyorum.
ginge

1
Bu konuyu gördüm, ama kesin olarak, her seçeneğin hangi durumda ( conda createvs conda env create) tercih edileceğini ve her birinin dezavantajlarının ne durumda olduğunu (örneğin: "[ conda env createiçin] pip kullanan paketlerin yerleştirildiği ortamları tam olarak anlamaya çalışıyorum. ek karmaşıklığa neden olur ": Ne tür bir ek karmaşıklık ekler?).
Tanguy

conda env create -f environment.ymlÇalıştırırken, bu hataya neden olacağını sormak istiyorum , çünkü yml dosyasındaki virtenv adı zaten kullanılmış. Üstesinden gelmek için yeni virtenv adını değiştirin.
Giang Nguyễn

Bu yol hayatınızı kurtarır! Anaconda Ortamları Yönetme sayfa talimatlarını temel alan bir dosyadan ortam oluşturuyorsanız, başka bir platform kullanıyorsanız çalışmaz. conda list --explicit > FILE_NAMEGeçerli platform için ikili dosyaları dışa aktarıyor ve görünüşe göre başka bir tane üzerinde çalışmıyor
Shayan Amani

5

Sanallaştırmaya daha hafif bir alternatif olan 'kaplara' bakınız, örneğin Docker ( https://www.docker.com/what-container ).

Biraz zaman yatırım gerektirecek ancak sonunda birçok fayda sağlayacak.

Kalın, italik olarak özel ihtiyacınızı belirttiğim linkten :

Geliştirme, sevkiyat ve dağıtım için standart birimlere paket yazılımı

Konteynır görüntüsü, çalışması için gereken her şeyi içeren hafif, bağımsız ve çalıştırılabilir bir yazılım paketidir: kod, çalışma zamanı, sistem araçları, sistem kütüphaneleri, ayarlar. Hem Linux hem de Windows tabanlı uygulamalar için mevcut olan konteynerli yazılım, ortamdan bağımsız olarak daima aynı şekilde çalışacaktır . Konteynerler, yazılımları çevresinden izole eder; örneğin, geliştirme ve aşamalı ortamlar arasındaki farklar ve aynı altyapı üzerinde farklı yazılımlar çalıştıran ekipler arasındaki çatışmaları azaltmaya yardımcı olur.


5

Geçerli conda ortamınızın ilk ihracat ortamı yapılandırmasını kullanarak:

conda-env  export -n your_env_name > your_env_name.yml

örnek:

conda-env  export -n base> base.yml

Yukarıdaki komutu çalıştırdıktan sonra, geçerli dizinde conda ortamınızla ilgili bilgileri içeren yml yapılandırma dosyası olmalıdır.

Yml yapılandırma dosyasını kullanarak yeni ortam yaratmak için:

conda-env create -n new_env -f=\path\to\base.yml 

örnek:

conda-env create -n venv -f=base.yml

Yukarıdakilerin işe yaramadığı durumlarda (conda'nın çeşitli sorunları nedeniyle), aşağıdaki varyasyonla denemeye değer:

conda-env create --name new_env --file \path\to\base.yml 

4

Programınız çoğunlukla Python ise, yalnızca sanal ortamlara güvenebilirsiniz.

Bağımlılıklarınızı izole etmek için sistem kitaplıklarını kullanmak yerine sanal ortamlar oluşturun. Ardından ortamlarınızı çoğaltmak için sanal ortam araçlarını kullanın.

Çalışan virtualenv'de, kurulu her Python kütüphanesinin sürümüyle bir dosya oluşturun:

pip freeze > requirements.txt

Yeni virtualenv'de pipbu kütüphaneleri aynı versiyona kurmak isteyin :

pip install -r requirements.txt

Bu, her iki makinede aynı lib sürümlerini almanızı sağlar. Needs.txt VCS'niz tarafından izlendiğinden, kodunuzun eski bir versiyonunun ortamını her zaman yeniden oluşturabilirsiniz.

Tabii ki, eğer bir veritabanına, bir üretim web sunucusuna, vb. İhtiyacınız varsa, birkaç adım daha atarsınız ve her iki ortamın da eşleşmesini sağlamak için virtualenv'e güvenemezsiniz. Burası Docker'ın devreye girdiği yer ( Pieter21'in cevabına bakınız ).


Sorunuzdaki anacondaetiketi fark etmedim . Bu konuda tecrübeli değilim, ama dikkatli olun. Anaconda'nın ortamları yönetmenin ve hem anaconda'yı kullanmanın hem de virtualenvbaşınızı belaya sokabileceğini düşünüyorum. Ancak, anaconda'nın eşdeğer özellikler sunması gerektiğini düşünüyorum.
Jérôme

1

Bu dokümantasyon sayfasının en başından itibaren :

Paketleri ileride kullanmak üzere saklayın:

conda list --export > package-list.txt

Paketleri bir dışa aktarma dosyasından yeniden yükleyin:

conda create -n myenv --file package-list.txt

1

Bir başkasını temel alan bir ortam yaratmanın mevcut yollarının bir parçası:

  • Bir ortamı klonlamak :

    • Mevcut bir ortamdan:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • Aynı makinedeki verilen bir ortam dosyasından:

      $ conda create --name ENV_NAME —-file FILE_NAME.yml

    • Dışa aktarılan bir ortam dosyasından farklı bir makineden:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```

$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B. Sun

0

Tek astar

conda create --clone source_env --name destination_env

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.