ติดตั้งเฉพาะแพ็คเกจที่มีโดยใช้“ conda install --yes --file requirements.txt” โดยไม่มีข้อผิดพลาด


96

ขณะติดตั้งแพ็กเกจใน requirements.txt โดยใช้ Conda ผ่านคำสั่งต่อไปนี้

conda install --yes --file requirements.txt

หากไม่มีแพ็กเกจใน requirements.txt จะแสดง "No package error" ดังที่แสดงด้านล่าง:

ใช้เว็บไซต์ API ของ Anaconda Cloud https://api.anaconda.org

กำลังเรียกข้อมูลเมตาของแพ็กเกจ: ....

ข้อผิดพลาด: ไม่พบแพ็คเกจในช่อง linux-64 ปัจจุบันที่ตรงกัน: nimfa == 1.2.3

คุณสามารถค้นหาแพ็คเกจนี้บน anaconda.org ด้วยไฟล์

anaconda search -t conda nimfa ==1.2.3

แทนที่จะโยนข้อผิดพลาดเป็นไปได้หรือไม่ที่จะเปลี่ยนลักษณะการทำงานนี้เพื่อให้ติดตั้งแพ็คเกจที่มีอยู่ทั้งหมดใน requirements.txt และแสดงคำเตือนสำหรับสิ่งที่ไม่พร้อมใช้งาน

ฉันต้องการสิ่งนี้เนื่องจากแพ็คเกจ nimfa ที่ข้อผิดพลาดระบุว่าไม่พร้อมใช้งานสามารถติดตั้ง pip ได้ ดังนั้นหากฉันสามารถเปลี่ยนพฤติกรรมconda install --yes --file requirements.txtเพียงแค่ส่งคำเตือนสำหรับแพ็คเกจที่ไม่พร้อมใช้งานฉันสามารถติดตามด้วยคำสั่งpip install -r requirments.txtใน. travis.yml เพื่อให้ TravisCI พยายามติดตั้งจากที่ใดก็ได้ที่มีอยู่

คำตอบ:


170

ฉันจบลงด้วยการทำซ้ำในบรรทัดของไฟล์

$ while read requirement; do conda install --yes $requirement; done < requirements.txt

แก้ไข : หากคุณต้องการติดตั้งแพ็กเกจโดยใช้ pip หากไม่สามารถใช้งานผ่าน conda ได้ให้ไป:

$ while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt

แก้ไข : หากคุณใช้ Windows (เครดิตไปที่@Clay ):

$ FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f"


5
ขอบคุณสำหรับสิ่งนี้คำใบ้เล็ก ๆ สำหรับทุกคนที่ใช้มันตรวจสอบความต้องการของคุณ
txt

1
มีวิธีทำpip installแพ็กเกจโดยอัตโนมัติที่ไม่สามารถใช้conda installงานได้หรือไม่ขณะทำซ้ำ
PeterB

2
@delusionX ฉันได้ขยายคำตอบแล้ว
จนถึง Hoffmann

11
โซลูชันของ @TillHoffmann บนเครื่อง Windows: FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f" ทำงานได้ดีมาก ขอบคุณ!
ดิน

3
หากคุณแสดงความคิดเห็นในไฟล์ความต้องการ pip จะบ่นอย่างละเอียด (น่ารำคาญหากไม่เป็นอันตราย) รูปแบบของ bash one-liner ซึ่งไม่สนใจความคิดเห็น:while read req; do if [[ $req != "#"* ]]; then conda install --yes $requirement || pip install $requirement; fi; done < requirements.txt
drevicko


1

สำหรับผู้ที่มองหาฉันใช้สิ่งนี้เป็นวิธีแก้ปัญหาของ @TillHoffmann สำหรับเปลือกปลา:

$ while read requirement; conda install --yes $requirement; end < requirements.txt

และ

$ while read requirement; conda install --yes $requirement;or pip install $requirement; end < requirements.txt

1

คำตอบของ Pbms ต่อไปนี้เป็นวิธีที่ถูกต้องโดยสมมติว่าคุณมีสภาพแวดล้อมที่มีอยู่ให้คัดลอก Conda เป็นอย่างที่สามารถติดตั้งทั้งแพคเกจ Conda และแพคเกจ pip environment.ymlที่ระบุไว้ใน ฉันต้องการบันทึกกระบวนการทั้งหมดโดยละเอียดมากขึ้น โปรดทราบว่าฉันใช้สภาพแวดล้อมแบบโฟลเดอร์ซึ่งเป็นสาเหตุที่ฉันเพิ่ม--prefix [path to environment folder]คำสั่งส่วนใหญ่

สมมติว่าคุณติดตั้งสภาพแวดล้อมสำหรับโปรเจ็กต์ที่มีอยู่ไปยังโฟลเดอร์ที่เรียกว่าenvในโฟลเดอร์ปัจจุบันดังนี้:

conda create --prefix ./env

คุณจะสร้างenvironment.ymlสำหรับสภาพแวดล้อมของโครงการเช่นนี้:

conda env export --prefix ./env > environment.yml

คุณจะสร้างสภาพแวดล้อมใหม่ภายในโฟลเดอร์อื่นโดยคัดลอกenvironment.ymlไปที่นั่นแล้วเรียกใช้สิ่งนี้จากที่นั่น:

conda env create --prefix ./env --file environment.yml

คุณจะได้รับสภาพแวดล้อมที่มีอยู่แล้วเพื่อจับคู่environment.ymlโดยการคัดลอกenvironment.ymlไปที่นั่นอีกครั้งจากนั้นเรียกใช้สิ่งนี้จากที่นั่น:

conda env update --prefix ./env --file environment.yml --prune

เมื่อสภาพแวดล้อมที่เป็นปัญหาทำงานอยู่คุณจะต้องตรวจสอบสถานะของแพ็กเกจดังนี้:

conda list

นี่เป็นเวอร์ชันย่อของสิ่งที่คำสั่งนั้นอาจพิมพ์ได้ (โปรดทราบว่ามีการทำเครื่องหมายแพ็คเกจ pip pypi):

# Name                    Version                   Build  Channel
pip                       19.2.2                   py37_0
python                    3.7.4                h5263a28_0
numpy                     1.16.4           py37h19fb1c0_0
pandas                    0.25.1           py37ha925a31_0
pyodbc                    4.0.27           py37ha925a31_0
ibm-db                    3.0.1                    pypi_0    pypi
ibm-db-sa                 0.3.5                    pypi_0    pypi

สุดท้ายนี้เป็นเวอร์ชันย่อของสิ่งที่environment.ymlอาจมีลักษณะเช่นนี้ (โปรดทราบว่าแพ็คเกจ pip แสดงอยู่ในหมวดหมู่ของตนเอง):

dependencies:
  - pip=19.2.2=py37_0
  - python=3.7.4=h5263a28_0
  - numpy=1.16.4=py37h19fb1c0_0
  - pandas=0.25.1=py37ha925a31_0
  - pyodbc=4.0.27=py37ha925a31_0
  - pip:
    - ibm-db==3.0.1
    - ibm-db-sa==0.3.5

โปรดทราบว่าการใช้ Conda และ pip ​​ร่วมกันอาจทำให้เกิดอาการเสียดท้องได้เนื่องจากอาจทำให้การพึ่งพาซึ่งกันและกันโดยไม่รู้ตัว คุณควรจะติดตั้งแพ็คเกจ Conda ทั้งหมดของคุณก่อนจากนั้นจึงทำการติดตั้งแพ็คเกจ pip ทั้งหมดของคุณในภายหลังแทนที่จะสลับระหว่างสองแพ็คเกจ หากสภาพแวดล้อมของคุณพังคำแนะนำอย่างเป็นทางการคือลบและสร้างใหม่ (จากenvironment.ymlไฟล์ของคุณ) สำหรับรายละเอียดเพิ่มเติมโปรดดูคู่มือนี้:

https://www.anaconda.com/using-pip-in-a-conda-environment/

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