วิธีการติดตั้งแพคเกจโดยใช้ pip ตามไฟล์ requirements.txt จากไดเรกทอรีท้องถิ่น


1082

นี่คือปัญหา

ฉันมีความต้องการ txt ที่ดูเหมือนว่า:

BeautifulSoup==3.2.0
Django==1.3
Fabric==1.2.0
Jinja2==2.5.5
PyYAML==3.09
Pygments==1.4
SQLAlchemy==0.7.1
South==0.7.3
amqplib==0.6.1
anyjson==0.3
...

ฉันมีไดเรกทอรีเก็บถาวรในท้องถิ่นที่มีแพ็คเกจ + อื่น ๆ ทั้งหมด

ฉันได้สร้าง virtualenv ใหม่ด้วย

bin/virtualenv testing

เมื่อเปิดใช้งานฉันพยายามติดตั้งแพคเกจตามความต้องการ.txtจากไดเรกทอรีเก็บถาวร

source bin/activate
pip install -r /path/to/requirements.txt -f file:///path/to/archive/

ฉันได้รับผลลัพธ์บางอย่างซึ่งดูเหมือนว่าบ่งบอกว่าการติดตั้งนั้นใช้ได้

Downloading/unpacking Fabric==1.2.0 (from -r ../testing/requirements.txt (line 3))
  Running setup.py egg_info for package Fabric
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no files found matching 'fabfile.py'
Downloading/unpacking South==0.7.3 (from -r ../testing/requirements.txt (line 8))
  Running setup.py egg_info for package South
....

แต่ภายหลังตรวจสอบพบว่าไม่มีการติดตั้งแพคเกจอย่างถูกต้อง ฉันไม่สามารถนำเข้าแพคเกจและไม่พบในไดเรกทอรีไซต์แพ็คเกจของ virtualenv ของฉัน แล้วมีอะไรผิดพลาด?


4
คุณเคยลองใช้--no-indexดังนั้นมันจึงไม่ได้ดู PyPI?
Hugo Tavares

2
คุณได้รับข้อความแสดงข้อผิดพลาด โดยทั่วไปอยู่ใกล้ด้านล่าง
bukzor

คุณสามารถใช้พา ธ ไฟล์แทนชื่อแพ็คเกจหมายความว่าคุณจะต้องเปลี่ยนไฟล์ requirements.txt แต่ให้คำสั่ง pip install เหมือนเดิม
asafge

9
คำตอบ votted มากที่สุด (ไมค์ลียงหนึ่ง) ไม่ได้ตอบคำถาม คุณกรุณายอมรับคำตอบของ codeape ที่ถูกต้องได้ไหม?
Piotr Dobrogost

2
ประหลาดใจที่ไม่มีใครเชื่อมโยง แต่pip.pypa.io/en/stable/user_guide/#requirements-files
MrMesees

คำตอบ:


785

สิ่งนี้ใช้ได้กับฉัน:

$ pip install -r requirements.txt --no-index --find-links file:///tmp/packages

--no-index- ละเว้นดัชนีแพ็คเกจ (ดูเฉพาะ--find-linksURL แทน)

-f, --find-links <URL>- หาก URL หรือเส้นทางไปยังไฟล์ html ให้ทำการแยกวิเคราะห์ลิงก์ไปยังที่เก็บถาวร หากเส้นทางในท้องถิ่นหรือfile://URL เป็นไดเรกทอรีให้ค้นหาคลังเก็บในรายการไดเรกทอรี


7
ข้อมูลเกี่ยวกับ --no-indexจาก pip คำสั่งช่วยติดตั้ง --no-indexละเว้นดัชนีแพคเกจ (ดูที่--find-linksURL แทนเท่านั้น) ข้อมูลเกี่ยวกับ --find-linksจากคำสั่ง pip ช่วยในการติดตั้ง -f , --find-links <url>ถ้า url หรือพา ธ ไปยังไฟล์ html, ให้ทำการแยกวิเคราะห์ลิงก์ไปยังไฟล์เก็บ หากพา ธ หรือไฟล์โลคัล: // url เป็นไดเรกทอรีให้ค้นหาคลังเก็บในรายการไดเรกทอรี
AWrightIV

1
// นี่อาจเป็นทางออกที่ยอดเยี่ยมโดยเฉพาะอย่างยิ่งเมื่อต้องดิ้นรนต่อสู้กับผู้จำหน่าย: bitprophet.org/blog/2012/06/07/on-vendorizing
Nathan Basanese

หนึ่งความระมัดระวังกับเรื่องนี้ก็คือคุณอาจpip install <some_module>ไม่ต้องใช้แต่ที่จะไม่ปรับปรุงrequirements.txt requirements.txtทางเลือกอื่นอาจกำลังอัพเดตตัวติดตั้งที่แสดงรายการคำสั่งการติดตั้ง pip ทั้งหมดที่รันเพื่อติดตั้งการพึ่งพา
เครื่องหมายแอมเปอร์แซนด์

ฉันลองมันpython -m pip install -r requirements.txtเมื่อภายในสภาพแวดล้อมที่เปิดใช้งาน venv สิ่งต่าง ๆ ที่ติดตั้งไว้อย่างราบรื่น แต่เมื่อฉันทำรายการ pip มันไม่ได้แสดงว่าแพ็คเกจเมื่อฉันอยู่ใน venv ที่ใช้งานอยู่หรือแม้กระทั่งหลังจากที่ปิดใช้งาน venv ยังไม่สามารถใช้แพ็คเกจนั้นได้ ไม่รู้ว่ามีอะไรผิดปกติที่นี่
Shreyan Mehta

คุณแน่ใจว่าpythonหมายถึงการปฏิบัติการของหลามสภาพแวดล้อมที่เปิดใช้งาน ( $ which python)
codeape

1363

ฉันได้อ่านข้างต้นแล้วโปรดตระหนักว่านี่เป็นคำถามเก่า แต่ก็ยังไม่ได้รับการแก้ไขทั้งหมดและยังคงอยู่ที่ส่วนบนของผลการค้นหา google ของฉันดังนั้นนี่คือคำตอบที่เหมาะกับทุกคน:

pip install -r /path/to/requirements.txt

284
ฉันรู้ว่าคำตอบนี้ไม่ได้ตอบคำถามเดิม แต่มันตอบคำถามที่ฉันมีเมื่อฉันพบสิ่งนี้ใน Google ...
Jonathan

คำถามเดิมมีการเปลี่ยนแปลง - โปรดสังเกตว่าเขาใช้ /path/to/requirements.txt ได้อย่างไร
Mike Lyons

8
@ MikeLyons ค่อนข้างแน่ใจว่าคำถามนั้นไม่ได้เปลี่ยนไปจริง ๆ แล้ว - ไม่มีประวัติการแก้ไข
Mark Amery

48
สำหรับผู้ที่ต้องการทราบสิ่งที่พวกเขาพิมพ์ -r ในคำสั่งเพียงแค่หมายถึง "ติดตั้งจากไฟล์ข้อกำหนด" และเป็นทางลัดสำหรับ
Florent Chatterji

2
เมื่อฉันต้องการที่จะอัพเกรดแพคเกจ (เช่น Django) ผมเปลี่ยนรุ่นในแฟ้ม requirements.txt pip install -r /path/to/requirements.txtของฉันและทำงานแล้ว สิ่งนี้จะตรวจจับการเปลี่ยนแปลงอัพเกรดแพ็คเกจและทิ้งทุกอย่างไว้คนเดียว
ผู้ใช้

129

เพื่อให้ virtualenv ติดตั้งไฟล์ทั้งหมดในไฟล์ requirements.txt

  1. cd ไปยังไดเรกทอรีที่ต้องการ.txt
  2. เปิดใช้งาน virtualenv ของคุณ
  3. ทำงาน: pip install -r requirements.txt ในเปลือกของคุณ

3
"pyenv virtualenv pip install requirements.txt ไม่ทำงาน" เพื่อประโยชน์ของ Google ...
Jerad

มันใช้งานได้สำหรับฉันแทนที่จะตอบคำถามอื่นแทน
โจ Eark

58

ฉันมีปัญหาที่คล้ายกัน ฉันลองสิ่งนี้:

pip install -U -r requirements.txt 

(-U = อัปเดตหากติดตั้งไว้แล้ว)

แต่ปัญหายังคงดำเนินต่อไป ฉันตระหนักว่าห้องสมุดทั่วไปบางแห่งเพื่อการพัฒนาพลาดไป

sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk

ฉันไม่รู้ว่าจะช่วยคุณได้หรือไม่


32
pip install -r requirements.txt

สำหรับรายละเอียดเพิ่มเติมโปรดตรวจสอบตัวเลือกความช่วยเหลือ

pip install --help

เราสามารถหาตัวเลือก '-r'

-r, - ข้อกำหนดติดตั้งจากไฟล์ข้อกำหนดที่กำหนด ตัวเลือกนี้สามารถใช้ได้หลายครั้ง

ข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการติดตั้ง pip ที่ใช้กันทั่วไป: (นี่คือตัวเลือกช่วยเหลือในคำสั่ง pip install)

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้ยังเป็นชุดตัวเลือกที่สมบูรณ์ โปรดใช้ pip install - ช่วยสำหรับรายการตัวเลือกทั้งหมด


26

คำตอบสั้น ๆ

pip install -r /path/to/requirements.txt

หรือในรูปแบบอื่น:

python -m pip install -r /path/to/requirements.txt

คำอธิบาย

นี่-rคือรูปแบบย่อ--requirementและขอpipให้ติดตั้งจากrequirementsไฟล์ที่กำหนด

pipจะเริ่มการติดตั้งหลังจากตรวจสอบความพร้อมของรายการทั้งหมดในrequirementsไฟล์และจะไม่เริ่มการติดตั้งแม้ว่าrequirementจะไม่สามารถใช้งานได้

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

cat requirements.txt | xargs -n 1 pip install

ในการละเว้นความคิดเห็น (บรรทัดที่ขึ้นต้นด้วย#) และบรรทัดว่างให้ใช้:

cat requirements.txt | cut -f1 -d"#" | sed '/^\s*$/d' | xargs -n 1 pip install

20

บ่อยครั้งที่คุณต้องการติดตั้งอย่างรวดเร็วจากคลังข้อมูลท้องถิ่นโดยไม่ต้องตรวจสอบ PyPI

ก่อนอื่นให้ดาวน์โหลดคลังเก็บที่ตอบสนองความต้องการของคุณ:

$ pip install --download <DIR> -r requirements.txt

จากนั้นติดตั้งโดยใช้–find-linksและ–no-index:

$ pip install --no-index --find-links=[file://]<DIR> -r requirements.txt

no such option: --download
Max Malysh

12

ฉันทำงานกับระบบจำนวนมากที่ถูกนักพัฒนาล้อเล่นโดยทำตามคำแนะนำที่พบบนอินเทอร์เน็ต เป็นเรื่องธรรมดามากที่คุณpipและคุณpythonไม่ได้มองหาเส้นทาง / แพ็คเกจไซต์เดียวกัน ด้วยเหตุนี้เมื่อฉันพบกับสิ่งแปลกประหลาดฉันเริ่มต้นด้วยการทำสิ่งนี้:

$ python -c 'import sys; print(sys.path)'
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages']

$ pip --version
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)

นั่นคือระบบที่มีความสุข

ด้านล่างนี้เป็นระบบที่ไม่มีความสุข (หรืออย่างน้อยก็เป็นระบบที่โง่เขลาอย่างไร้ความปราณีซึ่งทำให้ผู้อื่นไม่มีความสุข)

$ pip --version
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)

$ python -c 'import sys; print(sys.path)'
['', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/site-packages']

$ which pip pip2 pip3
/usr/local/bin/pip
/usr/local/bin/pip3

มันไม่มีความสุขเพราะpipเป็น (python3.6 และ) ใช้/usr/local/lib/python3.6/site-packagesขณะที่pythonเป็น (python2.7 และ) ใช้/usr/local/lib/python2.7/site-packages

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

$ which -a python python2 python3
/usr/local/bin/python
/usr/bin/python
/usr/local/bin/python2
/usr/local/bin/python3

$ /usr/bin/python -m pip install -r requirements.txt

คุณเคยได้ยินว่า "ถ้ามันไม่พังอย่าพยายามแก้ไข" เวอร์ชันของ DevOps คือ "ถ้าคุณไม่ทำลายมันและคุณสามารถแก้ไขได้อย่าพยายามแก้ไข"


10

ก่อนอื่นสร้างสภาพแวดล้อมเสมือนจริง

ใน python 3.6

virtualenv --python=/usr/bin/python3.6 <path/to/new/virtualenv/>

ใน python 2.7

virtualenv --python=/usr/bin/python2.7 <path/to/new/virtualenv/>

จากนั้นเปิดใช้งานสภาพแวดล้อมและติดตั้งแพคเกจทั้งหมดที่มีอยู่ในไฟล์ requirement.txt

source <path/to/new/virtualenv>/bin/activate
pip install -r <path/to/requirement.txt>

9

การติดตั้งไฟล์ requirements.txt ภายใน virtual env ด้วย python 3:

ฉันมีปัญหาเดียวกัน ฉันพยายามติดตั้งไฟล์ requirements.txt ภายในสภาพแวดล้อมเสมือนจริง ฉันพบวิธีแก้ปัญหา

เริ่มแรกฉันสร้าง env เสมือนจริงของฉันด้วยวิธีนี้:

virtualenv -p python3 myenv

เปิดใช้งานสภาพแวดล้อมโดยใช้:

source myenv/bin/activate

ตอนนี้ฉันติดตั้ง requirements.txt โดยใช้:

pip3 install -r requirements.txt

การติดตั้งสำเร็จและฉันสามารถนำเข้าโมดูลได้


ฉันประสบปัญหานี้ขณะติดตั้งไฟล์ข้อกำหนดภายในสภาพแวดล้อมเสมือน ตอนนี้ฉันได้แก้ไขคำตอบของฉันเพื่อแก้ไขปัญหา
janu777

1
ใช้งูหลาม 3.6 บน Windows, ผมต้องทำvirtualenv -p python myenv, myenv\Scripts\activate.bat,pip install -r requirements.txt
bdforbes

1
อันที่จริงในทางตรงกันข้ามนี้ดูเหมือนว่าเพียงตอบว่าไม่ตอบส่วนหนึ่งของคำถามเกี่ยวกับการติดตั้ง deps ที่กำหนดไว้ในประเทศในการrequirements.txtที่จะ virtualenv ถ้าฉันไม่มีอะไรหายไป? อย่างไรก็ตามขอบคุณ!
davnicwil


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