วิธีอัปเดตสภาพแวดล้อม Conda ที่มีอยู่ด้วยไฟล์. yml


140

สภาพแวดล้อม conda ที่มีอยู่แล้วจะอัพเดตด้วยไฟล์. yml อื่นได้อย่างไร สิ่งนี้มีประโยชน์อย่างมากเมื่อทำงานกับโปรเจ็กต์ที่มีไฟล์ความต้องการหลายไฟล์เช่นbase.yml, local.yml, production.ymlฯลฯ

ตัวอย่างเช่นด้านล่างคือbase.ymlไฟล์ที่มีแพ็คเกจ conda-forge, conda และ pip:

base.yml

name: myenv
channels:
  - conda-forge
dependencies:
  - django=1.10.5
  - pip:
    - django-crispy-forms==1.6.1

conda env create -f base.ymlสภาพแวดล้อมที่เกิดขึ้นจริงจะถูกสร้างขึ้นด้วย:

base.ymlต่อมาในแพคเกจเพิ่มเติมจะต้องมีการเพิ่มใน ไฟล์อื่นกล่าวว่าlocal.ymlต้องนำเข้าการอัปเดตเหล่านั้น

ความพยายามก่อนหน้านี้เพื่อบรรลุเป้าหมายนี้ ได้แก่ :

การสร้างlocal.ymlไฟล์ด้วยข้อกำหนดการนำเข้า:

channels:

dependencies:
  - pip:
    - boto3==1.4.4
imports:
  - requirements/base. 

จากนั้นเรียกใช้คำสั่ง: conda install -f local.yml.

สิ่งนี้ใช้ไม่ได้ ความคิดใด ๆ ?


เป็นไปได้ไหมที่จะอัปเดตสภาพแวดล้อมที่เปิดใช้งานในปัจจุบัน? ฉันเพิ่งลองสิ่งนี้ แต่การอัปเดตไปที่สภาพแวดล้อมที่มีชื่อในไฟล์ yml
Sören

คำตอบ:


204

ลองใช้conda env update :

conda activate myenv
conda env update --file local.yml

หรือไม่จำเป็นต้องเปิดใช้งานสภาพแวดล้อม (ขอบคุณ @NumesSanguis):

conda env update --name myenv --file local.yml

12
คุณไม่จำเป็นต้องเท่ากับระหว่างและ-f file.ymlการลบเครื่องหมายเท่ากับจะทำให้แท็บเสร็จสมบูรณ์ใน.ymlชื่อไฟล์
BallpointBen

4
เพิ่ม--name env_nameที่จะไม่สนใจใด ๆแท็กในname: foo local.ymlยังป้องกันไม่จำเป็นต้องเปิดใช้งาน myenv ก่อน คำสั่งแบบเต็ม: conda env update --name env_name --file local.yml จาก: stackoverflow.com/a/45525593/3399066ความคิดเห็น
NumesSanguis

1
ใน conda เวอร์ชันล่าสุดฉันคิดว่าเราใช้ "conda enable myenv" แทน "source enable myenv"
teter123f

32

คำตอบที่แนะนำถูกต้องบางส่วน คุณจะต้องเพิ่มตัวเลือก--pruneเพื่อถอนการติดตั้งแพ็คเกจที่ถูกลบออกจาก environment.yml คำสั่งที่ถูกต้อง:

conda env update -f local.yml --prune

แม้แต่แฟล็ก --pruneก็ไม่เพียงพอที่จะลบการอ้างอิงที่ติดตั้ง pip ...
Jean Paul

จริง ฉันคิดว่ามันจะลบการอ้างอิง conda แต่ไม่ใช่สิ่งที่ระบุไว้ใน pip
Blink

22

คำตอบของ alkamid อยู่ในบรรทัดที่ถูกต้อง แต่ฉันพบว่า Conda ไม่สามารถติดตั้งการอ้างอิงใหม่ได้หากสภาพแวดล้อมทำงานอยู่แล้ว ก่อนอื่นการปิดใช้งานสภาพแวดล้อมจะช่วยแก้ปัญหานี้:

source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!

4
conda จะรู้ได้อย่างไรว่า env ใดที่จะอัปเดตหากไม่ใช่ env ที่ใช้งานอยู่
Thomas Fauskanger

5
@ThomasFauskanger คุณสามารถระบุได้อย่างชัดเจนด้วย-n <environment name>แต่โดยค่าเริ่มต้นดูเหมือนว่าจะทำงานกับสภาพแวดล้อมที่คาดไว้ (อาจจะใช้งานล่าสุดหรือเป็นเพียงตัวเลือกสภาพแวดล้อมเริ่มต้น)
Dave

18
@ThomasFauskanger ชื่อของสภาวะแวดล้อมถูกระบุไว้ในไฟล์ YAML หากถูกส่งออกโดย conda
Thomas

ฉันคิดว่าประเด็นเก่าของคำถามนี้คือการอัปเดตสภาพแวดล้อมที่แตกต่างไปจากที่ระบุในไฟล์ yaml
Giacomo

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