ไฟล์สภาพแวดล้อมการส่งออก Anaconda


129

ฉันจะสร้างไฟล์สภาพแวดล้อม anaconda ที่สามารถใช้กับคอมพิวเตอร์เครื่องอื่นได้อย่างไร

ฉันส่งออกสภาพแวดล้อมงูหลามอนาคอนดาไปยัง YML โดยใช้conda env export > environment.ymlไฟล์. สิ่งที่ส่งออกenvironment.ymlมีบรรทัดนี้prefix: /home/superdev/miniconda3/envs/juicyenvซึ่งแมปไปยังตำแหน่งของงูใหญ่ของฉันซึ่งจะแตกต่างจากพีซีอื่น ๆ


7
ฉันเพิ่งทำการทดสอบบางอย่างและคิดว่าฉันพบว่าคำนำหน้าถูกละเว้น ... ไม่แน่ใจว่าเหตุใดจึงอยู่ในการส่งออก env คุณควรจะสามารถทำได้ conda env create -f environment.yml เช่นกันจากประสบการณ์ของฉันสิ่งนี้จะไม่ทำงานข้ามแพลตฟอร์มเนื่องจาก conda env จะแสดงรายการการอ้างอิงจำนวนมากเช่น "vs2015_runtime" หากคุณใช้ Windows แต่แน่นอนว่าไม่มีใน linux
Alex G Rice

4
Conda แนะนำให้สร้างenvironment.ymlไฟล์ด้วยมือจริงๆดังนั้นคุณสามารถปล่อยมันออกไปได้ - ดูstackoverflow.com/questions/39280638/…
Brian Burns

คำตอบ:


179

ฉันไม่พบสิ่งใดในcondaข้อกำหนดที่อนุญาตให้คุณส่งออกไฟล์สภาพแวดล้อมโดยไม่ต้องมีprefix: ...บรรทัด อย่างไรก็ตามตามที่Alex ชี้ให้เห็นในความคิดเห็น conda ดูเหมือนจะไม่สนใจบรรทัดคำนำหน้าเมื่อสร้างสภาพแวดล้อมจากไฟล์

โดยที่ในใจถ้าคุณต้องการการใช้งานอื่น ๆ ที่มีความรู้ในการเริ่มต้นของคุณไม่มีเส้นทางการติดตั้งคุณสามารถลบบรรทัดคำนำหน้าด้วยก่อนที่จะเขียนgrepenvironment.yml

conda env export | grep -v "^prefix: " > environment.yml

ไม่ว่าจะด้วยวิธีใดผู้ใช้รายอื่นจะเรียกใช้:

conda env create -f environment.yml

และสภาพแวดล้อมจะได้รับการติดตั้งในพา ธ สภาพแวดล้อม conda เริ่มต้น

หากคุณต้องการระบุเส้นทางการติดตั้งที่แตกต่างจากค่าเริ่มต้นสำหรับระบบของคุณ (ไม่เกี่ยวข้องกับ 'คำนำหน้า' ใน environment.yml) เพียงแค่ใช้-pแฟล็กตามด้วยพา ธ ที่ต้องการ

conda env create -f environment.yml -p /home/user/anaconda3/envs/env_name

โปรดทราบว่า Conda แนะนำให้สร้างenvironment.ymlด้วยมือซึ่งมีความสำคัญอย่างยิ่งหากคุณต้องการแบ่งปันสภาพแวดล้อมของคุณข้ามแพลตฟอร์ม (Windows / Linux / Mac) ในกรณีนี้คุณสามารถเว้นprefixบรรทัดไว้ได้


1
... eggcellent! 👍
Ahi Tuna

45

วิธีที่ง่ายที่สุดในการบันทึกแพ็กเกจจากสภาพแวดล้อมที่จะติดตั้งในคอมพิวเตอร์เครื่องอื่นคือ:

$ conda list -e > req.txt

จากนั้นคุณสามารถติดตั้งสภาพแวดล้อมโดยใช้

$ conda create -n new environment --file req.txt

หากคุณใช้pipโปรดใช้คำสั่งต่อไปนี้: อ้างอิงhttps://pip.pypa.io/en/stable/reference/pip_freeze/

$ env1/bin/pip freeze > requirements.txt
$ env2/bin/pip install -r requirements.txt

ดี แต่ดูเหมือนจะใช้ไม่ได้กับแพ็คเกจที่ติดตั้ง pip
Little Bobby Tables

1
ขอบคุณฉันเพิ่งอัปเดตตามข้อมูลอ้างอิงที่ระบุ
javac

ฉันใช้ทั้ง Anaconda Navigator และ pip ​​(จากในสภาพแวดล้อม) เพื่อติดตั้งสิ่งต่างๆ คุณจะแนะนำให้ใช้อะไร ทั้งสองคำสั่ง?
DA

ฉันคิดว่ามันจะดีกว่าการใช้คำสั่ง CONDA ในสภาพแวดล้อมงูใหญ่คุณยังสามารถใช้ pip ถ้ามันเป็นสิ่งจำเป็น
javac

9
  • ลินุกซ์

    conda env export --no-builds | grep -v "คำนำหน้า"> environment.yml

  • ของ windows

    conda env export --no-builds | findstr -v "คำนำหน้า"> environment.yml


เหตุผล: โดยค่าเริ่มต้นconda env exportรวมข้อมูลการสร้าง:

$ conda env export
...
dependencies:
  - backcall=0.1.0=py37_0
  - blas=1.0=mkl
  - boto=2.49.0=py_0
...

คุณสามารถส่งออกสภาพแวดล้อมของคุณได้โดยไม่ต้องสร้างข้อมูล:

$ conda env export --no-builds
...
dependencies:
  - backcall=0.1.0
  - blas=1.0
  - boto=2.49.0
...

ซึ่งแก้สภาพแวดล้อมจากเวอร์ชัน Python และ OS


1
ฉันยอมรับว่านี่เป็นคำตอบที่ดี แต่โปรดพิจารณาเพิ่มรายละเอียดว่าเหตุใดการยกเว้นข้อมูลบิวด์จึงมีประโยชน์สำหรับการโอน envs ข้ามแพลตฟอร์ม
merv

จบลงด้วยการใช้สิ่งนี้ แต่ความคิดที่ดี @merv ทำได้เพียงแค่นั้น
François Leblanc

ขออภัยสิ่งนี้จะใช้ไม่ได้เสมอไปเมื่อติดตั้งการส่งออกและติดตั้งใหม่ในระบบปฏิบัติการอื่น
Sören

2

ฉันพบว่าการส่งออกแพ็กเกจในรูปแบบสตริงเท่านั้นที่สามารถพกพาได้มากกว่าการส่งออกcondaสภาพแวดล้อมทั้งหมด ตามคำตอบก่อนหน้านี้ได้แนะนำไปแล้ว:

$ conda list -e > requirements.txt

แต่นี้requirements.txtมีจำนวนการสร้างที่ไม่ได้พกพาระหว่างระบบปฏิบัติการเช่นระหว่างและMac Ubuntuในconda env exportเรามีตัวเลือก--no-buildsแต่ไม่มีconda list -eดังนั้นเราจึงสามารถลบหมายเลขบิลด์ได้โดยใช้คำสั่งต่อไปนี้:

$ sed -i -E "s/^(.*\=.*)(\=.*)/\1/" requirements.txt 

และสร้างสภาพแวดล้อมใหม่บนคอมพิวเตอร์เครื่องอื่น:

conda create -n recreated_env --file requirements.txt 

sedคำสั่งใช้งานได้ดีทีเดียว ฉันต้องลบเวอร์ชันแพตช์ เพื่อmajor.minor.patchให้major.minorได้ผล ปรากฎว่าหมายเลขแพตช์ที่ต่ำกว่าถูกทิ้งโดย repos หลัก
Lucas

1
  1. ก่อนอื่นให้เปิดใช้งานสภาพแวดล้อม conda ของคุณ (สิ่งที่คุณต้องการส่งออก / สำรองข้อมูล)
conda activate myEnv
  1. ส่งออกแพ็กเกจทั้งหมดไปยังไฟล์ (myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
  1. คืนค่า / นำเข้าสภาพแวดล้อม:
conda create --name myEnvRestored --file myEnvBkp.txt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.