วิธีการลอกแบบสภาพการทำงานของ Python บนเครื่องอื่นได้อย่างไร?


26

ฉันพัฒนารูปแบบการเรียนรู้ของเครื่องด้วย Python (Anaconda + Flask) บนเวิร์กสเตชันของฉันและทุกอย่างเป็นไปด้วยดี ต่อมาฉันพยายามส่งโปรแกรมนี้ไปยังเครื่องอื่นซึ่งแน่นอนว่าฉันพยายามตั้งค่าสภาพแวดล้อมเดียวกัน แต่โปรแกรมไม่สามารถทำงานได้ ฉันคัดลอกโปรแกรมไปยังเครื่องอื่นซึ่งทำงานได้อย่างราบรื่น

ฉันไม่สามารถทราบได้ว่าปัญหาคืออะไรในกรณีที่ล้มเหลว (ทั้งรหัสโปรแกรมและข้อความแสดงข้อผิดพลาดมากมายดังนั้นฉันจึงไม่สามารถแสดงได้ที่นี่) แต่ฉันเกือบจะแน่ใจว่าเป็นสิ่งที่มีรุ่นที่แตกต่างกันของการอ้างอิง .

ดังนั้นคำถามของฉันคือสภาพแวดล้อมที่โปรแกรมบางโปรแกรมทำงานได้ดีฉันจะโคลนไปยังโปรแกรมอื่นที่ควรทำงานได้อย่างไร แน่นอนว่าไม่มีการโคลนระบบเต็มรูปแบบ;)


ใช้การส่งออก conda env
kbrose

คำตอบ:


39

ก่อนอื่นนี้เป็นคำถาม Python / Anaconda และอาจถูกถามในไซต์ย่อยการแลกเปลี่ยนสแต็กที่แตกต่างกัน


สำหรับคำถามนั้นคุณสามารถส่งออกสภาพแวดล้อมของ Anaconda โดยใช้:

conda env export > environment.yml

และสร้างใหม่โดยใช้:

conda env create -f environment.yml

โปรดทราบว่าตามที่คนอื่นแนะนำ - คุณควรใช้สภาพแวดล้อมเสมือนจริงซึ่งช่วยให้คุณสร้างสภาพแวดล้อมบางอย่างที่แยกออกจากเครื่องของคุณและจัดการได้ง่ายขึ้น

ในการสร้างสภาพแวดล้อมเสมือนจริงใน Anaconda คุณสามารถใช้:

conda create -n yourenvname python=x.x anaconda

ซึ่งคุณเปิดใช้งานโดยใช้:

source activate yourenvname

เอกสารอนาคอนดาไม่ชัดเจนว่าจะใช้conda createหรือconda env createเมื่อแชร์ / สร้างสภาพแวดล้อมใหม่อีกครั้ง โปรดช่วยอธิบายรายละเอียดเพิ่มเติมว่าเหตุใดคุณจึงแนะนำให้ใช้conda env createในสถานการณ์นี้
Tanguy

คุณสามารถค้นหาบันทึกบางอย่างเกี่ยวกับความแตกต่างระหว่างconda createและconda env createที่นี่: groups.google.com/a/continuum.io/forum/#!topic/conda/… ที่กล่าวว่าฉันคิดว่าคุณสามารถใช้แทนกันได้
ginge

1
ฉันได้เห็นเธรดนี้แล้ว แต่ฉันพยายามเข้าใจอย่างถ่องแท้ว่าสถานการณ์ใดที่ควรเลือกตัวเลือก ( conda createvs conda env create) และข้อเสียของแต่ละตัวเลือก (เช่น: "[ใช้conda env createสำหรับ]] สภาพแวดล้อมที่แพ็คเกจที่ใช้ pip ได้ถูกติดตั้งลงใน ซึ่งทำให้เกิดความซับซ้อนเพิ่มเติม ": เพิ่มความซับซ้อนชนิดใดเพิ่มเติม)
Tanguy

ฉันต้องการถามว่าเมื่อใช้งานconda env create -f environment.ymlสิ่งนี้จะทำให้เกิดข้อผิดพลาดเนื่องจากมีการใช้ชื่อของ virtenv ในไฟล์ yml แล้ว เปลี่ยนชื่อเป็น virtenv ใหม่ของคุณเพื่อเอาชนะ
Giang Nguyễn

วิธีนี้ช่วยชีวิตคุณได้! หากคุณสร้างสภาพแวดล้อมจากไฟล์ตามคำแนะนำของหน้าการจัดการสภาพแวดล้อมของ Anaconda จะไม่ทำงานหากคุณใช้แพลตฟอร์มอื่น conda list --explicit > FILE_NAMEส่งออกไบนารีสำหรับแพลตฟอร์มปัจจุบันและเห็นได้ชัดว่าไม่ได้ทำงานบนแพลตฟอร์มอื่น
Shayan Amani

5

ดูที่ 'ตู้คอนเทนเนอร์' เช่น Docker ( https://www.docker.com/what-container ) ซึ่งเป็นทางเลือกที่เบากว่าในการจำลองเสมือน

มันจะต้องใช้เวลาในการลงทุน แต่ในที่สุดจะให้ประโยชน์มากมาย

จากลิงค์ที่ฉันทำเครื่องหมายความต้องการเฉพาะของคุณด้วยตัวเอียงหนา :

ซอฟต์แวร์สำเร็จรูปเป็นหน่วยมาตรฐานสำหรับการพัฒนาการขนส่งและการปรับใช้

อิมเมจคอนเทนเนอร์เป็นแพ็กเกจที่เรียกใช้งานได้น้ำหนักเบาแบบสแตนด์อะโลนของชิ้นส่วนของซอฟต์แวร์ที่มีทุกสิ่งที่จำเป็นในการเรียกใช้: รหัสรันไทม์เครื่องมือระบบไลบรารีระบบการตั้งค่า สามารถใช้ได้ทั้ง Linux และ Windows ปพลิเคชันที่ใช้ซอฟแวร์ containerized มักจะทำงานเดียวกันโดยไม่คำนึงถึงสภาพแวดล้อม ภาชนะบรรจุแยกซอฟต์แวร์ออกจากสภาพแวดล้อมตัวอย่างเช่นความแตกต่างระหว่างการพัฒนาและสภาพแวดล้อมการจัดเตรียมและช่วยลดความขัดแย้งระหว่างทีมที่ใช้งานซอฟต์แวร์ที่แตกต่างกันในโครงสร้างพื้นฐานเดียวกัน


5

การกำหนดค่าสภาพแวดล้อมการส่งออกครั้งแรกของสภาพแวดล้อม conda ปัจจุบันของคุณใช้:

conda-env  export -n your_env_name > your_env_name.yml

ตัวอย่าง:

conda-env  export -n base> base.yml

หลังจากรันคำสั่งด้านบนไฟล์เหล่านี้ควรเป็นไฟล์การกำหนดค่า yml ในไดเรกทอรีปัจจุบันของคุณซึ่งมีข้อมูลสภาพแวดล้อม conda ของคุณ

ในการสร้างสภาพแวดล้อมใหม่โดยใช้ไฟล์การกำหนดค่า yml:

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

ตัวอย่าง:

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

ในกรณีที่ข้างต้นใช้งานไม่ได้ (เนื่องจากปัญหาต่าง ๆ ของตัวคอนโดเอง) มันก็คุ้มค่าที่จะลองกับรูปแบบต่อไปนี้:

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

4

หากโปรแกรมของคุณส่วนใหญ่เป็น Python คุณสามารถพึ่งพาสภาพแวดล้อมเสมือนได้เพียงอย่างเดียว

สร้างสภาพแวดล้อมเสมือนจริงเพื่อแยกการพึ่งพาของคุณแทนที่จะใช้ไลบรารีระบบ จากนั้นใช้เครื่องมือสภาพแวดล้อมเสมือนเพื่อทำซ้ำสภาพแวดล้อมของคุณ

ใน virtualenv ที่ทำงานให้สร้างไฟล์ที่มีเวอร์ชันของไลบรารี Python ที่ติดตั้งแต่ละอัน:

pip freeze > requirements.txt

ใน virtualenv ใหม่ขอpipให้ติดตั้งไลบรารีเหล่านั้นด้วยเวอร์ชันเดียวกัน:

pip install -r requirements.txt

สิ่งนี้ทำให้แน่ใจว่าคุณได้รับ lib เวอร์ชันเดียวกันกับทั้งสองเครื่อง และเนื่องจาก requirements.txt ถูกติดตามโดย VCS ของคุณคุณสามารถสร้างสภาพแวดล้อมของรหัสรุ่นเก่าของคุณใหม่ได้

แน่นอนถ้าคุณต้องการฐานข้อมูลเว็บเซิร์ฟเวอร์ที่ใช้งานจริง ฯลฯ คุณจะได้ไม่กี่ขั้นตอนและคุณไม่สามารถใช้ virtualenv เพื่อให้แน่ใจว่าสภาพแวดล้อมทั้งสองนั้นตรงกัน นี่คือที่ขั้นตอนนักเทียบท่า (ดูคำตอบของ Pieter21 )


ฉันไม่ได้สังเกตanacondaแท็กในคำถามของคุณ ฉันไม่ได้มีประสบการณ์กับเรื่องนี้ แต่ระวัง ฉันคิดว่าอนาคอนด้ามีวิธีในการจัดการกับสภาพแวดล้อมของตัวเองและใช้ทั้งอนาคอนดาและvirtualenvอาจทำให้คุณเดือดร้อน อย่างไรก็ตามฉันคิดว่าอนาคอนด้าควรมีคุณสมบัติที่เทียบเท่า
Jérôme


1

สรุปวิธีการที่มีอยู่เพื่อสร้างสภาพแวดล้อมตามวิธีอื่น:

  • การโคลนสภาวะแวดล้อม :

    • จากสภาพแวดล้อมที่มีอยู่:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • จากไฟล์สภาพแวดล้อมที่ส่งออกบนเครื่องเดียวกัน:

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

    • จากไฟล์สภาวะแวดล้อมที่เอ็กซ์พอร์ตบนเครื่องอื่น:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```

$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B. อา.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.