ฉันจะติดตามแพคเกจที่ติดตั้ง pip ในสภาพแวดล้อม Anaconda (Conda) ได้อย่างไร


141

ผมได้ติดตั้งและได้รับใช้งูกระจายงูหลามและฉันได้เริ่มใช้งู (Conda) สภาพแวดล้อม ฉันสามารถใช้conda install...คำสั่งมาตรฐานเพื่อวางแพคเกจจากการแจกจ่ายในสภาพแวดล้อมของฉัน แต่จะใช้อะไรนอก (เช่น Flask-WTF, flask-sqlalchemy และ alembic) ฉันต้องใช้pip installในสภาพแวดล้อมที่ใช้งานอยู่ อย่างไรก็ตามเมื่อฉันดูเนื้อหาของสภาพแวดล้อมไม่ว่าจะในไดเรกทอรีหรือใช้แพ็คเกจ ed conda listเหล่านี้pip installจะไม่แสดงขึ้นมา

ใช้pip freezeและpip listแสดงรายการทุกแพ็คเกจที่ฉันเคยติดตั้ง

มีวิธีในการติดตามสิ่งที่อยู่ในแต่ละ Anaconda ของฉันenv(ทั้งpipและcondaติดตั้ง)?


7
ใช้pipติดตั้งกับเช่นconda ~/anaconda/bin/pipใช้ในการติดตั้งแพคเกจที่เป็นcondaสภาพแวดล้อมเช่นเดียวกับที่จะเห็นสหภาพของแพคเกจที่ติดตั้งกับเรื่องนี้และมีการpip conda install
osa

7
conda listมีในขณะที่ตอนนี้รวมถึงแพคเกจหลามที่ติดตั้งโดยวิธีการอื่น ๆ (เช่น pip ติดตั้งง่ายโดยตรงกับpython setup.py installฯลฯ ฯลฯ )
kalefranz

1
อย่าอัปเกรด pip ของคุณมิฉะนั้นการส่งออกนี้จะถูกปิด
Andrew Cassidy

คำตอบ:


120

conda-envจะทำสิ่งนี้โดยอัตโนมัติ (ถ้า pip ถูกติดตั้งด้วย conda)

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

conda env export -n <env-name> > environment.yml

ไฟล์จะแสดงรายการทั้งแพคเกจ conda และแพ็คเกจ pip:

name: stats
channels:
  - javascript
dependencies:
  - python=3.4
  - bokeh=0.9.2
  - numpy=1.9.*
  - nodejs=0.10.*
  - flask
  - pip:
    - Flask-Testing

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

conda env create -f path/to/environment.yml

64

condaจะติดตามแพ็คเกจที่ติดตั้งเท่านั้น และpipจะให้แพคเกจที่ติดตั้งโดยใช้pipตัวติดตั้งเองหรือใช้setuptoolsในการsetup.pyสร้างคอนโดสร้างข้อมูลไข่ ดังนั้นคุณมีสามตัวเลือกโดยทั่วไป

  1. คุณสามารถใช้ยูเนี่ยนของconda listและpip freezeและจัดการแพคเกจที่ได้รับการติดตั้งโดยใช้conda(ที่แสดงในconda list) กับcondaแพคเกจผู้จัดการและคนที่มีการติดตั้งpip(ที่แสดงในpip freezeแต่ไม่ได้อยู่ในconda list) pipด้วย

  2. ติดตั้งในสภาพแวดล้อมของคุณเท่านั้นpython, pipและแพคเกจและจัดการทุกอย่างด้วยdistribute pip(นี่ไม่ใช่เรื่องเล็กน้อยหากคุณใช้ Windows ... )

  3. สร้างของคุณเองแพคเกจและจัดการทุกอย่างด้วยcondaconda

ฉันอยากจะแนะนำตัวเลือกที่สามเนื่องจากเป็นการง่ายในการสร้างcondaแพ็คเกจ มีที่เก็บคอมไพล์ของสูตรตัวอย่างในบัญชี GitHub ของ Continuum แต่มันมักจะเดือดลงไปที่:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

หรือเพียงแค่:

conda pipbuild PACKAGE

นอกจากนี้เมื่อคุณสร้างขึ้นครั้งเดียวคุณสามารถอัปโหลดไปยังhttps://binstar.org/และเพียงติดตั้งจากที่นั่น

condaแล้วคุณจะมีทุกอย่างจัดการโดยใช้


3
ฉันเพียงแค่พยายามที่จะ~/anaconda/bin/pip install memory-profilerและและพวกเขามีทั้งที่แสดงในconda install numba ~/anaconda/bin/pip freeze
osa

2
"ที่เก็บ git ของสูตรอาหารตัวอย่างในบัญชี github ของทวีป" คุณหมายถึงgithub.com/ContinuumIO/anaconda-recipesหรือไม่? กรุณาลิงค์ถ้าคุณสามารถ
endolith

สิ่งนี้ไม่ได้ติดตั้งแพคเกจจริง ๆ เพื่อให้คุณสามารถนำเข้าได้ คุณต้องทำconda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2ตามที่อธิบายไว้ในstackoverflow.com/a/20750388/125507
endolith

ฉันจะบอกว่ามีอยู่เสมอconda install python=3.x.yในสภาพแวดล้อมของคุณเช่นการติดตั้ง pip ตามมาผ่านการติดตั้ง pip ที่ติดตั้ง conda
Ustaman Sangat

24

มีสาขาของ conda (new-pypi-install) ที่เพิ่มการรวมที่ดีขึ้นกับ pip และ PyPI ในรายการ conda โดยเฉพาะจะแสดงแพคเกจที่ติดตั้ง pip และการติดตั้ง conda จะพยายามค้นหาแพ็คเกจ conda ก่อนและความล้มเหลวที่จะใช้ pip เพื่อติดตั้งแพ็กเกจ

สาขานี้มีกำหนดการที่จะรวมในปลายสัปดาห์นี้เพื่อให้เวอร์ชัน 2.1 ของ conda จะมีการรวม pip ที่ดีขึ้นกับ conda


2
ฉันต้องการจะชี้ให้เห็นว่าสิ่งนี้ทำงานได้ใน conda 2.2.3 แล้ว (และอาจเป็นไปได้ก่อนหน้านี้) วิธีการทำงานคือถ้าคุณลองconda install packageและไม่สามารถหาสูตร conda ได้ก็จะพยายามติดตั้งผ่านpip(และติดตามดู) มันยังมีประโยชน์แนะนำให้ติดตั้งpipหากไม่ได้อยู่ในสภาพแวดล้อมของคุณ ขอบคุณ Travis สำหรับการทำงานทั้งหมดของคุณ!
jorgeca

5
ชี้แจงเนื่องจากฉันอ่านผิดหลายครั้ง @ Travis หมายความว่าฉันคิดว่าถ้ามีคนหนึ่งกำลังทำงานอยู่ใน conda การใช้ pip จะค้นหาแพ็คเกจ conda ก่อนหรือไม่ การย้อนกลับไม่เป็นความจริง - การติดตั้ง conda ไม่ได้มองหาแพ็คเกจ pypi ไม่ใช่แม้แต่รายการใน pypi.binstar.org นี่เป็นของ conda 3.5.2
AnneTheAgile

9
สิ่งนี้ถูกลบไปแล้วหรือไม่ ถ้าฉันวิ่งบอกว่าconda install autopep8มันบอกฉันว่า "ไม่พบแพ็คเกจ" และฉันควรค้นหา anaconda.org ด้วยตนเอง
endolith

@AnneTheAgile running pip...ยังไม่ทำงานมันจะไม่มองหาแพ็คเกจ conda เลย
วัง

16

ฉันทำตามคำตอบของ @Viktor Kerkez และประสบความสำเร็จอย่างมาก ฉันพบว่าบางครั้งสูตรนี้ของ

แพคเกจโครงกระดูก pypi

แพคเกจสร้างแพคเกจ

จะดูเหมือนว่าทุกอย่างทำงานได้ แต่ฉันไม่สามารถนำเข้าแพคเกจได้สำเร็จ เมื่อเร็ว ๆ นี้ฉันถามเกี่ยวกับสิ่งนี้ในกลุ่มผู้ใช้ Anacondaและได้ยินจาก @Travis Oliphant ตัวเองในวิธีที่ดีที่สุดในการใช้ conda เพื่อสร้างและจัดการแพ็คเกจที่ไม่ได้จัดส่งกับ Anaconda คุณสามารถอ่านกระทู้นี้ได้ที่นี่แต่ฉันจะอธิบายวิธีการด้านล่างเพื่อหวังว่าจะได้คำตอบสำหรับคำถามของ OP ที่สมบูรณ์ยิ่งขึ้น ...

ตัวอย่าง: ฉันจะติดตั้งแพ็คเกจ prettyplotlib ที่ยอดเยี่ยมบน Windows โดยใช้ conda 2.2.5

1a) conda build --build-recipe prettyplotlib

คุณจะเห็นข้อความสร้างทั้งหมดดูดีจนกระทั่งส่วนทดสอบสุดท้ายของงานสร้าง ฉันเห็นข้อผิดพลาดนี้

ไฟล์ "C: \ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py", การนำเข้าบรรทัดที่ 23 ไม่มี SyntaxError: ไม่สามารถกำหนดให้กับไม่มีการทดสอบล้มเหลว: prettyplotlib-0.1.3-py27_0

1b)ไปที่ / conda-recipes / prettyplotlib และแก้ไขไฟล์ meta.yaml ปัจจุบันแพ็กเกจที่ถูกตั้งค่าเช่นในขั้นตอนที่ 1a ส่งผลให้ไฟล์ yaml ที่มีข้อผิดพลาดในtestส่วน ตัวอย่างเช่นนี่คือวิธีการค้นหาของฉันprettyplotlib

test:   # Python imports   imports:
    - 
    - prettyplotlib
    - prettyplotlib

แก้ไขส่วนนี้เพื่อลบบรรทัดว่างที่นำหน้าด้วย - และยังลบบรรทัด prettyplotlib ที่ซ้ำซ้อน ในช่วงเวลาของการเขียนนี้ฉันพบว่าฉันต้องแก้ไขไฟล์ meta.yaml ส่วนใหญ่เช่นนี้สำหรับแพ็คเกจภายนอกที่ฉันติดตั้งด้วย conda ซึ่งหมายความว่ามีบรรทัดการนำเข้าว่างเปล่าทำให้เกิดข้อผิดพลาดพร้อมกับการนำเข้าซ้ำซ้อนของแพ็คเกจที่กำหนด .

1c)เรียกใช้คำสั่งจาก 1a อีกครั้งซึ่งควรเสร็จสิ้นโดยไม่เกิดข้อผิดพลาด ในตอนท้ายของงานสร้างคุณจะถูกถามว่าคุณต้องการอัปโหลดงานสร้างไปที่binstarหรือไม่ ฉันป้อนไม่แล้วก็เห็นข้อความนี้:

หากคุณต้องการอัปโหลดแพ็คเกจนี้ไปที่ binstar.org ในภายหลังให้พิมพ์:

$ binstar อัปโหลด C: \ Anaconda \ conda-bld \ win-64 \ prettyplotlib-0.1.3-py27_0.tar.bz2

ไฟล์ tar.bz2 นั้นเป็นบิลด์ที่คุณต้องติดตั้งจริง ๆ

2) conda install C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

ทำตามขั้นตอนเหล่านี้ฉันได้ใช้ conda สำเร็จเพื่อติดตั้งแพคเกจจำนวนมากที่ไม่ได้มากับ Anaconda ก่อนหน้านี้ฉันได้ติดตั้งสิ่งเหล่านี้โดยใช้ pip ดังนั้นฉันจึงpip uninstall PACKAGEติดตั้ง PACKAGE with conda ก่อน ด้วยการใช้ conda ตอนนี้ฉันสามารถจัดการ (เกือบ) แพ็คเกจทั้งหมดของฉันด้วยวิธีการเดียวแทนที่จะติดตั้งสิ่งต่าง ๆ พร้อมกับ conda, pip, easy_install และการติดตั้ง python setup.py

สำหรับบริบทฉันคิดว่าการโพสต์บล็อกล่าสุดโดย @ Travis Oliphant จะเป็นประโยชน์สำหรับคนอย่างฉันที่ไม่เห็นคุณค่าทุกอย่างที่ไปสู่แพ็คเกจ Python ที่แข็งแกร่ง แต่แน่นอนว่าเมื่อใดก็ตามที่ "เพิ่งใช้งานได้" conda ดูเหมือนจะเป็นหนทางที่ดีในอนาคต ...


2
ใช้ conda เวอร์ชัน 3.5.2 คำสั่ง $ conda build - build-formula XXX; เกิดข้อผิดพลาดกับ 'อาร์กิวเมนต์ที่ไม่รู้จัก: - build-formula' คำตอบแบบเต็มคือ; การใช้งาน: conda-build [-h] [-c] [--no-binstar-upload] [- เอาท์พุท] [-s] [-t] [- ไม่มีการทดสอบ] [-V] [-q] RECIPE_PATH [RECIPE_PATH ... ] conda-build: ข้อผิดพลาด: ข้อโต้แย้งที่ไม่รู้จัก: - build-สูตร
AnneTheAgile


3

ฉันคิดว่าสิ่งที่ขาดหายไปคือเมื่อคุณ:

>pip install .

ในการติดตั้งแพคเกจท้องถิ่นด้วย setup.py จะทำการติดตั้งแพ็กเกจที่สามารถมองเห็นได้ทั้งหมดที่ envs ที่ใช้ไพ ธ อนรุ่นเดียวกัน หมายเหตุฉันใช้ pip รุ่น conda!

เช่นถ้าฉันใช้ python2.7 มันทำให้แพคเกจท้องถิ่นที่นี่:

/usr/local/anaconda/lib/python2.7/site-packages

หากฉันจากนั้นสร้าง conda env ใหม่ด้วย python = 2.7 (= ค่าเริ่มต้น):

>conda create --name new

>source activate new

แล้วทำ:

(new)>conda list    // empty - conda is not aware of any packages yet

อย่างไรก็ตามถ้าฉัน:

(new)>pip list      // the local package installed above is present

ดังนั้นในกรณีนี้ conda ไม่ทราบเกี่ยวกับแพคเกจ pip แต่แพคเกจสามารถใช้ได้กับไพ ธ อน

อย่างไรก็ตามถ้าฉันแทนที่จะติดตั้งแพคเกจท้องถิ่น (อีกครั้งโดยใช้ pip) หลังจากที่ฉันสร้าง (และเปิดใช้งาน) conda env ใหม่ตอนนี้ conda เห็นมัน:

(new)>conda list   // sees that the package is there and was installed by pip

ดังนั้นฉันคิดว่าการทำงานร่วมกันระหว่าง conda และ pip ​​มีปัญหาบางประการ - เช่นการใช้ pip เพื่อติดตั้งแพ็กเกจท้องถิ่นจากภายใน conda env หนึ่งทำให้แพ็คเกจนั้นพร้อมใช้งาน


2

conda env exportแสดงรายการแพคเกจ conda และ pip ​​ทั้งหมดในสภาพแวดล้อม conda-envจะต้องติดตั้งในรากของ conda ( conda install -c conda conda-env)

ในการเขียนenvironment.ymlไฟล์ที่อธิบายถึงสภาพแวดล้อมปัจจุบัน:

conda env export > environment.yml

อ้างอิง:


2

ฉันมักจะนำหน้าโฟลเดอร์ 'bin / pip' สำหรับสภาพแวดล้อมเฉพาะที่คุณต้องการติดตั้งแพ็กเกจก่อนคำสั่ง 'pip' ตัวอย่างเช่นหากคุณต้องการติดตั้ง pymc3 ในสภาพแวดล้อม py34 คุณควรใช้คำสั่งนี้:

~/anaconda/envs/py34/bin/pip install git+https://github.com/pymc-devs/pymc3 

คุณเพียงแค่ต้องค้นหาเส้นทางที่ถูกต้องไปยังโฟลเดอร์ 'bin / pip' ของสภาพแวดล้อมและวางไว้ก่อนคำสั่งติดตั้ง


1

ฉันwhich pipแสดงเส้นทางต่อไปนี้:

$ which pip
/home/kmario23/anaconda3/bin/pip

ดังนั้นสิ่งที่ฉันติดตั้งแพคเกจใช้pip install <package-name>จะต้องมีการสะท้อนให้เห็นในรายการแพคเกจเมื่อรายการถูกส่งออกโดยใช้:

$ conda list --export > conda_list.txt

แต่ฉันทำไม่ได้ ดังนั้นแทนที่จะใช้คำสั่งต่อไปนี้ตามที่แนะนำโดยคนอื่น ๆ :

# get environment name by
$ conda-env list

# get list of all installed packages by (conda, pip, etc.,)
$ conda-env export -n <my-environment-name> > all_packages.yml
# if you haven't created any specific env, then just use 'root'

ตอนนี้ฉันเห็นแพ็คเกจทั้งหมดในall-packages.ymlไฟล์ของฉันแล้ว


1

คุณสามารถเริ่มต้นด้วยการติดตั้งคำสั่งที่ระบุด้านล่างในสภาพแวดล้อม conda:

conda install pip

ตามด้วยการติดตั้งแพ็คเกจ pip ทั้งหมดที่คุณต้องการในสภาพแวดล้อม

หลังจากติดตั้งแพ็คเกจ conda และ pip ​​ทั้งหมดเพื่อส่งออกการใช้สิ่งแวดล้อม:

conda env export -n <env-name> > environment.yml

จะเป็นการสร้างไฟล์ที่ต้องการในโฟลเดอร์

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