ควรใช้ conda หรือ conda-forge สำหรับสภาพแวดล้อม Python?


128

Condaและconda-forgeเป็นผู้จัดการแพ็คเกจ Python ทั้งคู่ อะไรคือตัวเลือกที่เหมาะสมเมื่อแพ็คเกจมีอยู่ในที่เก็บทั้งสอง? ตัวอย่างเช่น Django สามารถติดตั้งด้วยอย่างใดอย่างหนึ่ง แต่ความแตกต่างระหว่างทั้งสองคือการอ้างอิงหลายประการ (conda-forge มีอีกมากมาย) ไม่มีคำอธิบายสำหรับความแตกต่างเหล่านี้ไม่ใช่แม้แต่ README ง่ายๆ

ควรใช้ตัวไหน Conda หรือ conda-forge? มันสำคัญหรือไม่?


5
"Conda และ conda-forge ต่างก็เป็นผู้จัดการแพ็คเกจ Python" ฉันไม่คิดว่าเป็นเรื่องจริง ฉันไม่คิดว่าสิ่งเหล่านี้จะอยู่ในประเภทเดียวกันด้วยซ้ำ condaเป็นผู้จัดการแพ็คเกจและconda-forgeเป็นช่องทาง อาจจะเป็นเรื่องจริงเมื่อถามคำถามนี้?
endolith

คำตอบ:


204

คำตอบสั้น ๆ ก็คือจากประสบการณ์ของฉันโดยทั่วไปไม่สำคัญว่าคุณจะใช้ตัวไหน

คำตอบยาว:

ดังนั้นจึงconda-forgeเป็นช่องทางเพิ่มเติมที่อาจติดตั้งแพ็คเกจ ในแง่นี้มันไม่ได้พิเศษไปกว่าช่องเริ่มต้นหรือช่องอื่น ๆ อีกหลายร้อย (หลายพัน?) ที่ผู้คนโพสต์แพ็กเกจไป คุณสามารถเพิ่มช่องของคุณเองได้หากคุณสมัครที่https://anaconda.orgและอัปโหลดแพ็คเกจ Conda ของคุณเอง

ที่นี่เราต้องสร้างความแตกต่างซึ่งฉันคิดว่าคุณไม่ชัดเจนจากวลีของคุณในคำถามระหว่างcondaตัวจัดการแพ็คเกจข้ามแพลตฟอร์มและconda-forgeช่องแพ็คเกจ Anaconda Inc. (เดิมชื่อ Continuum IO) ซึ่งเป็นผู้พัฒนาซอฟต์แวร์หลักcondaยังดูแลช่องทางแพ็กเกจแยกต่างหากซึ่งเป็นค่าเริ่มต้นเมื่อคุณพิมพ์conda install packagenameโดยไม่ต้องเปลี่ยนตัวเลือกใด ๆ

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

conda install -c some-channel packagename

แน่นอนว่าต้องมีแพ็กเกจอยู่ในช่องนั้น วิธีนี้จะติดตั้งและการอ้างอิงจากpackagename some-channelหรือคุณสามารถระบุ:

conda install some-channel::packagename

แพคเกจยังคงมีอยู่some-channelแต่ตอนนี้packagenameจะถูกดึงออกมาsome-channelเท่านั้น แพ็กเกจอื่น ๆ ที่จำเป็นเพื่อตอบสนองการอ้างอิงจะถูกค้นหาจากรายการช่องเริ่มต้นของคุณ

หากต้องการดูการกำหนดค่าช่องของคุณคุณสามารถเขียน:

conda config --show channels

คุณสามารถควบคุมลำดับที่จะค้นหาช่องconda configได้ คุณสามารถเขียน:

conda config --add channels some-channel

เพื่อเพิ่มช่องsome-channelที่ด้านบนของchannelsรายการกำหนดค่า สิ่งนี้ให้some-channelความสำคัญสูงสุด ลำดับความสำคัญเป็นตัวกำหนด ( บางส่วน ) ว่าช่องใดถูกเลือกเมื่อมีมากกว่าหนึ่งช่องทางที่มีแพ็คเกจเฉพาะ หากต้องการเพิ่มช่องที่ท้ายรายการและให้ลำดับความสำคัญต่ำที่สุดให้พิมพ์

conda config --append channels some-channel

หากคุณต้องการลบช่องที่คุณเพิ่มคุณสามารถทำได้โดยการเขียน

conda config --remove channels some-channel

ดู

conda config -h

สำหรับตัวเลือกเพิ่มเติม

จากที่กล่าวมาทั้งหมดมีเหตุผลหลักสี่ประการที่จะใช้conda-forgeช่องนี้แทนdefaultsช่องที่ดูแลโดย Anaconda:

  1. แพ็กเกจบนconda-forge อาจเป็นข้อมูลล่าสุดมากกว่าแพ็กเกจในdefaultsช่อง
  2. มีแพ็คเกจในconda-forgeช่องที่ไม่สามารถใช้ได้จากdefaults
  3. คุณต้องการใช้การอ้างอิงเช่นopenblas(from conda-forge) แทนmkl(from defaults)
  4. หากคุณกำลังติดตั้งแพ็กเกจที่ต้องใช้ไลบรารีที่คอมไพล์แล้ว (เช่นส่วนขยาย C หรือ wrapper รอบ ๆ ไลบรารี C) อาจลดโอกาสที่จะเข้ากันไม่ได้หากคุณติดตั้งแพ็กเกจทั้งหมดในสภาพแวดล้อมจากแชนเนลเดียวเนื่องจากไบนารี ความเข้ากันได้ของไลบรารี C พื้นฐาน (แต่คำแนะนำนี้อาจล้าสมัย / มีการเปลี่ยนแปลงในอนาคต)

1
ขอบคุณ! ฉันมีคำถามที่เกี่ยวข้องสองข้อ: 1. ฉันจะรู้ได้อย่างไรว่าช่องไหนดีและ; 2. หลังจากฉันกำหนดค่าในหนึ่งช่องฉันจะรีเซ็ตกลับเป็นค่าเริ่มต้นได้อย่างไร
Daniel

1
@Kenny เพื่อตอบคำถามแรกของคุณคุณควรค้นหาแพ็คเกจที่คุณต้องการในanaconda.orgและดูว่าช่องใดมีแพ็คเกจ ฉันแก้ไขคำตอบเพื่อตอบคำถามที่สองของคุณ อย่างไรก็ตามฉันควรทราบด้วยว่าหากคุณต้องการติดตั้งแพ็กเกจเดียวจากแชนเนลการใช้conda install -c some-channel packagenameวิธีเขียนคำสั่งนั้นอาจง่ายกว่า
darthbith

มันเยี่ยมมาก! มีการเปรียบเทียบระหว่าง conda-forge และ conda ในแง่ของ # ของโมดูลที่รองรับความใหม่ความครอบคลุม ฯลฯ หรือไม่
Rutger Hofste

1
ไม่mklเร็วกว่าopenblasเหรอ?
endolith

3
@endolith อาจจะ แต่ 1) อาจเป็นไปได้เฉพาะในโปรเซสเซอร์ Intel และ 2) ไม่ใช่โอเพ่นซอร์ส
darthbith

6

Anaconda ได้เปลี่ยนข้อกำหนดในการให้บริการเพื่อให้ "ผู้ใช้เชิงพาณิชย์จำนวนมาก" ต้องจ่ายเงินซึ่งไม่รวมถึงconda-forgeช่อง

คุณอาจต้องการติดconda-forgeหากคุณไม่ต้องการจ่ายเงินสำหรับการใช้งาน ตามที่ระบุไว้ในเอกสาร :

conda config --add channels conda-forge
conda config --set channel_priority strict
conda install <package-name>

คุณยังสามารถใช้miniforgeซึ่งมีconda-forgeเป็นช่องเริ่มต้นและรองรับแพลตฟอร์ม ppc64le และ aarch64 เช่นเดียวกับแพลตฟอร์มอื่น ๆ ตามปกติ


3

ช่อง conda-forge เป็นที่ที่คุณสามารถค้นหาแพ็คเกจที่สร้างขึ้นสำหรับ conda แต่ยังไม่ได้เป็นส่วนหนึ่งของการจัดจำหน่าย Anaconda อย่างเป็นทางการ

โดยทั่วไปคุณสามารถใช้สิ่งเหล่านี้ได้


-1

มีไลบรารี Python บางไลบรารีที่คุณไม่สามารถติดตั้งได้ด้วยวิธีง่ายๆconda installเนื่องจากช่องของพวกเขาไม่พร้อมใช้งานเว้นแต่คุณจะใช้ conda-forge จากประสบการณ์ของฉัน pip เป็นข้อมูลทั่วไปในการค้นหาแหล่งที่มาของช่องทางที่แตกต่างจาก conda ตัวอย่างเช่นหากคุณต้องการติดตั้งpython-constraintคุณสามารถทำได้pip installแต่ติดตั้งผ่าน ** cond ** คุณต้องระบุช่องทาง conda-forge-

conda install -c conda-forge python-constraint // works

แต่ไม่

conda install python-constraint

1
คำตอบที่สับสน การติดตั้ง pip ใช้แพ็กเกจภายนอกการจัดการแพ็กเกจและการตรวจสอบการอ้างอิงของ conda ซึ่งหมายความว่าคุณต้องจัดการ (และอาจมีการอ้างอิง) ด้วยตนเองและคำสั่งเช่นconda update --allจะไม่อัปเดตแพ็คเกจที่ติดตั้ง pip
Jean Monet

คำตอบนี้ให้คำแนะนำที่ไม่ดี การสอดแทรกคำสั่ง conda และ pip ​​ในสภาพแวดล้อมเดียวกันเป็นวิธีปฏิบัติที่ไม่ดี ใช้ conda install สำหรับแพ็กเกจทั้งหมดโดยเฉพาะเว้นแต่ว่าแพ็คเกจ python เฉพาะจะไม่มีในรูปแบบ conda จากนั้นใช้ pip เป็นทางเลือกสุดท้ายเนื่องจาก pip จะไม่เพิ่มแพ็กเกจลงในดัชนีแพ็กเกจ conda สำหรับสภาพแวดล้อมนั้น การใช้ conda จากนั้น pip ตามด้วย conda แล้ว pip จากนั้น conda และอื่น ๆ เพื่อสร้างสภาพแวดล้อมในที่สุดจะให้ดัชนีสภาพแวดล้อม conda ที่เสียหาย
Rich Lysakowski PhD
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.