Làm cách nào để cài đặt các gói bằng pip theo tệp tests.txt từ một thư mục cục bộ?


1082

Đây là vấn đề

Tôi có một tệp.txt.txt giống như:

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
...

Tôi có một thư mục lưu trữ cục bộ chứa tất cả các gói + khác.

Tôi đã tạo một virtualenv mới với

bin/virtualenv testing

Khi kích hoạt nó, tôi đã cố gắng cài đặt các gói theo yêu cầu.txt từ thư mục lưu trữ cục bộ.

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

Tôi có một số đầu ra dường như chỉ ra rằng cài đặt là tốt

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
....

Nhưng kiểm tra sau đó cho thấy không có gói nào được cài đặt đúng. Tôi không thể nhập gói và không tìm thấy gói nào trong thư mục gói trang web của virtualenv của tôi. Vì vậy, những gì đã đi sai?


4
Bạn đã thử sử dụng --no-indexđể nó thậm chí không nhìn vào PyPI?
Hugo Tavares

2
Bạn đã bắn tỉa thông báo lỗi. Nó thường ở gần đáy.
bukzor

Bạn có thể sử dụng đường dẫn tệp thay vì tên gói, điều đó có nghĩa là bạn sẽ phải thay đổi tệp tests.txt, nhưng vẫn giữ lệnh cài đặt pip như cũ.
vào

9
Câu trả lời được đánh giá cao nhất (câu trả lời của Mike Lyons) thậm chí không trả lời câu hỏi . Bạn có thể vui lòng chấp nhận câu trả lời của codeape là câu trả lời đúng không?
Piotr Dobrogost

2
ngạc nhiên không ai khác liên kết, nhưng pip.pypa.io/en/urdy/user_guide/#requirements-files
MrMesees

Câu trả lời:


785

Điều này làm việc cho tôi:

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

--no-index- Bỏ qua chỉ mục gói (chỉ nhìn vào --find-linksURL thay thế).

-f, --find-links <URL>- Nếu một URL hoặc đường dẫn đến một tệp html, thì phân tích các liên kết đến tài liệu lưu trữ. Nếu một đường dẫn cục bộ hoặc file://URL đó là một thư mục, thì hãy tìm tài liệu lưu trữ trong danh sách thư mục.


7
Thông tin --no-indextừ lệnh pip giúp cài đặt --no-index Bỏ qua chỉ mục gói (chỉ nhìn vào --find-linksURL thay thế). Thông tin --find-linkstừ lệnh pip giúp cài đặt -f , --find-links <url>Nếu một url hoặc đường dẫn đến tệp html, sau đó phân tích các liên kết đến tài liệu lưu trữ. Nếu một đường dẫn hoặc tệp cục bộ: // url đó là một thư mục, thì hãy tìm tài liệu lưu trữ trong danh sách thư mục.
AWrightIV

1
//, Đây có thể là một giải pháp rất thanh lịch, đặc biệt là cuộc đấu tranh vĩnh cửu với việc bán hàng hóa: bitprophet.org/blog/2012/06/07/on-vendorizing
Nathan Basan

Một lưu ý với điều này là bạn có thể pip install <some_module>không sử dụng requirements.txtnhưng điều đó sẽ không cập nhật requirements.txt. Một sự thay thế có thể là cập nhật một docker sao cho nó liệt kê tất cả các lệnh cài đặt pip được chạy để cài đặt các phụ thuộc.
ampersands

tôi đã thử điều này python -m pip install -r requirements.txtkhi bên trong môi trường venv kích hoạt. mọi thứ được cài đặt trơn tru nhưng khi tôi thực hiện danh sách pip thì nó không hiển thị các gói đó, khi tôi đang ở trong venv hoạt động hoặc thậm chí sau khi tắt venv. cũng không thể sử dụng các gói đó. không biết có gì sai ở đây
Shreyan Mehta

Bạn có chắc chắn pythonđề cập đến python thực thi ( $ which python) không?
codeape

1364

Tôi đã đọc ở trên, nhận ra đây là một câu hỏi cũ, nhưng nó hoàn toàn chưa được giải quyết và vẫn ở đầu kết quả tìm kiếm google của tôi vì vậy đây là một câu trả lời phù hợp với tất cả mọi người:

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

284
Tôi nhận ra câu trả lời này không giải quyết được câu hỏi ban đầu, nhưng nó trả lời câu hỏi tôi có khi tôi tìm thấy câu hỏi này trên Google ...
Jonathan

Câu hỏi ban đầu đã thay đổi - chú ý cách anh ấy sử dụng /path/to/requirements.txt ngay bây giờ.
Mike Lyons

8
@MikeLyons khá chắc chắn rằng câu hỏi chưa thực sự thay đổi - không có lịch sử chỉnh sửa.
Đánh dấu Amery

48
Đối với những người muốn biết họ gõ gì, -r trong lệnh chỉ có nghĩa là "cài đặt từ tệp yêu cầu" và là lối tắt cho --requirement
Florent Chatterji

2
Khi tôi muốn nâng cấp gói (ví dụ Django), tôi thay đổi phiên bản trong tệp yêu cầu của mình rồi chạy pip install -r /path/to/requirements.txt. Điều này phát hiện sự thay đổi, nâng cấp gói và để mọi thứ khác một mình.
Người dùng

130

Đối với virtualenv để cài đặt tất cả các tệp trong tệp tests.txt.

  1. cd vào thư mục nơi có tệp tests.txt
  2. kích hoạt virtualenv của bạn
  3. chạy: pip install -r requirements.txt trong vỏ của bạn

3
"pyenv virtualenv pip install tests.txt không hoạt động" vì lợi ích của Google ...
Jerad

Nó hoạt động với tôi thay vì các câu trả lời khác, ty
Jo Eark

58

Tôi đã có một vấn đề tương tự. Tôi đã thử điều này:

pip install -U -r requirements.txt 

(-U = cập nhật nếu nó đã được cài đặt)

Nhưng vấn đề vẫn tiếp tục. Tôi nhận ra rằng một số thư viện chung để phát triển đã bị bỏ lỡ.

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

Tôi không biết nếu điều này sẽ giúp bạn.


32
pip install -r requirements.txt

Để biết thêm chi tiết xin vui lòng kiểm tra tùy chọn trợ giúp.

pip install --help

Chúng ta có thể tìm thấy tùy chọn '-r'

-r, --requirement Cài đặt từ tệp yêu cầu đã cho. Tùy chọn này có thể được sử dụng nhiều lần.

Thông tin thêm về một số tùy chọn cài đặt pip thường được sử dụng: (Đây là tùy chọn trợ giúp về lệnh cài đặt pip)

nhập mô tả hình ảnh ở đây

Ngoài ra ở trên là bộ tùy chọn đầy đủ. Vui lòng sử dụng cài đặt pip - trợ giúp cho danh sách đầy đủ các tùy chọn.


26

Câu trả lời ngắn

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

hoặc ở dạng khác:

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

Giải trình

Đây -rlà dạng ngắn --requirementvà nó yêu cầu pipcài đặt từ requirementstệp đã cho .

pipsẽ chỉ bắt đầu cài đặt sau khi kiểm tra tính khả dụng của tất cả các mục được liệt kê trong requirementstệp và nó sẽ không bắt đầu cài đặt ngay cả khi requirementkhông có sẵn.

Một cách giải quyết để cài đặt các gói có sẵn là cài đặt từng gói được liệt kê. Sử dụng lệnh sau cho điều đó. Một cảnh báo màu đỏ sẽ được hiển thị để thông báo cho bạn về các gói không có sẵn.

cat requirements.txt | xargs -n 1 pip install

Để bỏ qua các bình luận (dòng bắt đầu bằng a #) và dòng trống, sử dụng:

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

20

Thông thường, bạn sẽ muốn cài đặt nhanh từ kho lưu trữ địa phương, mà không cần thăm dò PyPI.

Đầu tiên, tải xuống tài liệu lưu trữ đáp ứng yêu cầu của bạn:

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

Sau đó, cài đặt bằng –find-links–no-index:

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

no such option: --download
Max Malysh

12

Tôi làm việc với rất nhiều hệ thống đã bị các nhà phát triển chế giễu "theo chỉ dẫn họ tìm thấy trên internet". Điều cực kỳ phổ biến là bạn pipvà bạn pythonkhông nhìn vào cùng một đường dẫn / gói trang web. Vì lý do này, khi tôi gặp phải sự kỳ quặc, tôi bắt đầu bằng cách làm điều này:

$ 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)

Đó là một hệ thống hạnh phúc .

Dưới đây là một hệ thống không hài lòng . (Hoặc ít nhất đó là một hệ thống không biết gì về hạnh phúc khiến người khác không vui.)

$ 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

Thật không vuipip(python3.6 và) đang sử dụng /usr/local/lib/python3.6/site-packageswhile pythonlà (python2.7 và) đang sử dụng/usr/local/lib/python2.7/site-packages

Khi tôi muốn chắc chắn rằng tôi đang cài đặt các yêu cầu cho đúng python, tôi sẽ làm điều này:

$ 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

Bạn đã nghe nói, "Nếu nó không bị hỏng, đừng cố sửa nó." Phiên bản DevOps của điều đó là, "Nếu bạn không phá vỡ nó và bạn có thể làm việc xung quanh nó, đừng cố gắng sửa nó."


10

trước hết, tạo một môi trường ảo

trong trăn 3.6

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

trong trăn 2.7

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

sau đó kích hoạt môi trường và cài đặt tất cả các gói có sẵn trong tệp request.txt.

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

9

Cài đặt tệp tests.txt bên trong env ảo với python 3:

Tôi gặp vấn đề tương tự. Tôi đã cố gắng cài đặt tệp tests.txt bên trong một môi trường ảo. Tôi tìm thấy giải pháp.

Ban đầu, tôi đã tạo env ảo của mình theo cách này:

virtualenv -p python3 myenv

Kích hoạt môi trường bằng cách sử dụng:

source myenv/bin/activate

Bây giờ tôi đã cài đặt tests.txt bằng cách sử dụng:

pip3 install -r requirements.txt

Cài đặt thành công và tôi đã có thể nhập các mô-đun.


Tôi gặp phải vấn đề này trong khi cài đặt tệp yêu cầu trong môi trường ảo. Bây giờ tôi đã sửa đổi phản hồi của mình để giải quyết vấn đề
janu777

1
Sử dụng Anaconda Python 3.6 trên Windows, tôi đã phải làm virtualenv -p python myenv, myenv\Scripts\activate.bat,pip install -r requirements.txt
bdforbes

1
Trên thực tế, ngược lại, điều này có vẻ như câu trả lời duy nhất mà không trả lời một phần của câu hỏi về cài đặt DEPS định nghĩa cục bộ trong requirements.txtmột virtualenv. Trừ khi tôi đang thiếu một cái gì đó? Dù sao cũng cảm ơn!
davnicwil

8

thử cái này

python -m pip install -r requirements.txt

7
pip install --user -r requirements.txt 

HOẶC LÀ

pip3 install --user -r requirements.txt 

Có thể chỉ định tập tin --userbên trong requirements.txt?
liang
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.