Bagaimana cara menginstal paket menggunakan pip sesuai dengan file needs.txt dari direktori lokal?


1083

Inilah masalahnya

Saya memiliki requirement.txt yang terlihat seperti:

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

Saya memiliki direktori arsip lokal yang berisi semua paket + lainnya.

Saya telah membuat virtualenv baru dengan

bin/virtualenv testing

setelah mengaktifkannya, saya mencoba menginstal paket sesuai dengan requirement.txt dari direktori arsip lokal.

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

Saya mendapat beberapa output yang sepertinya mengindikasikan bahwa instalasi baik-baik saja

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

Namun kemudian dicek ternyata tidak ada paket yang terpasang dengan benar. Saya tidak dapat mengimpor paket, dan tidak ada yang ditemukan di direktori paket situs virtualenv saya. Jadi apa yang salah?


4
Sudahkah Anda mencoba menggunakannya --no-indexsehingga bahkan tidak melihat PyPI?
Hugo Tavares

2
Anda telah memotong pesan kesalahan. Ini umumnya di dekat bagian bawah.
bukzor

Anda bisa menggunakan path file alih-alih nama paket, itu berarti Anda harus mengubah file requirement.txt, tetapi tetap gunakan perintah install pip yang sama.
asafge

9
Jawaban yang paling banyak dipilih (jawaban Mike Lyons) bahkan tidak menjawab pertanyaan . Bisakah Anda menerima jawaban codeape yang mana yang benar?
Piotr Dobrogost

2
kaget tidak ada orang lain yang tertaut kecuali pip.pypa.io/en/stable/user_guide/#requirements-files
MrMesees

Jawaban:


787

Ini bekerja untuk saya:

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

--no-index- Abaikan indeks paket (hanya melihat --find-linksURL saja).

-f, --find-links <URL>- Jika URL atau jalur ke file html, maka uraikan tautan ke arsip. Jika jalur lokal atau file://URL itu adalah direktori, maka cari arsip di daftar direktori.


7
Informasi tentang --no-indexdari perintah pip membantu menginstal --no-index Abaikan indeks paket (hanya melihat --find-linksURL saja). Informasi tentang --find-linksdari perintah pip membantu menginstal -f , --find-links <url>Jika url atau path ke file html, maka uraikan tautan ke arsip. Jika jalur atau file lokal: // url itu adalah direktori, maka cari arsip di daftar direktori.
AWrightIV

1
//, Ini bisa menjadi solusi yang sangat elegan, terutama mengingat perjuangan abadi dengan vendor: bitprophet.org/blog/2012/06/07/on-vendorizing
Nathan Basanese

Satu peringatan dengan ini adalah Anda mungkin pip install <some_module>tanpa menggunakan requirements.txttetapi itu tidak akan diperbarui requirements.txt. Alternatif mungkin memperbarui buruh pelabuhan sehingga daftar semua perintah instalasi pip yang dijalankan untuk menginstal dependensi.
ampersands

Saya mencoba ini python -m pip install -r requirements.txtketika di dalam lingkungan Venv diaktifkan. hal-hal yang diinstal dengan lancar tetapi ketika saya melakukan daftar pipa itu tidak menunjukkan paket itu, ketika saya berada di venv aktif atau bahkan setelah menonaktifkan venv. juga tidak dapat menggunakan paket itu. tidak tahu apa yang salah di sini
Shreyan Mehta

Apakah Anda yakin pythonmengacu pada executable python lingkungan yang diaktifkan ( $ which python)?
codeape

1366

Saya sudah membaca di atas, menyadari bahwa ini adalah pertanyaan lama, tetapi ini benar-benar belum terselesaikan dan masih di bagian atas hasil pencarian google saya jadi inilah jawaban yang cocok untuk semua orang:

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

284
Saya menyadari jawaban ini tidak menjawab pertanyaan awal, tetapi menjawab pertanyaan yang saya miliki ketika saya menemukan ini di Google ...
Jonathan

8
@ MikeLyons cukup yakin pertanyaannya belum berubah - tidak ada riwayat edit.
Mark Amery

49
bagi mereka yang ingin tahu apa yang mereka ketik, -r dalam perintah berarti "instal dari file persyaratan", dan merupakan jalan pintas untuk --requirement
Florent Chatterji

2
Ketika saya ingin memutakhirkan sebuah paket (mis. Django), saya mengubah versi dalam file requirement.txt saya dan kemudian menjalankannya pip install -r /path/to/requirements.txt. Ini mendeteksi perubahan, meningkatkan paket, dan meninggalkan yang lainnya sendirian.
Pengguna

1
sementara ini biasanya berhasil, beberapa kehalusan membuatnya gagal. Jika ada instalasi gagal untuk paket dalam requirements.txt, tidak satupun dari mereka akan diinstal. Jika modul yang diperlukan mengimpor dependensi selama pemasangannya (bukan hanya mencantumkannya sebagai persyaratan), ia akan gagal walaupun dependensinya mendahului dalam daftar dependensi, menyebabkan semua modul gagal. Mungkin bug untuk mengimpor modul dependen selama instalasi, tetapi juga mungkin tidak terduga bahwa dependensi yang tercantum di dalamnya requirements.txttidak diinstal secara berurutan, tetapi sekaligus.
iggie

130

Untuk virtualenv menginstal semua file dalam file requirement.txt.

  1. cd ke direktori di mana requirement.txt berada
  2. aktifkan virtualenv Anda
  3. jalankan: pip install -r requirements.txt di shell Anda

3
"pyenv virtualenv pip persyaratan menginstal.txt tidak berfungsi" demi Google ...
Jerad

Ini berfungsi untuk saya alih-alih jawaban lain, ty
Jo Eark

58

Saya punya masalah serupa. Saya mencoba ini:

pip install -U -r requirements.txt 

(-U = perbarui jika sudah diinstal)

Namun masalahnya terus berlanjut. Saya menyadari bahwa beberapa perpustakaan umum untuk pengembangan tidak terjawab.

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

Saya tidak tahu apakah ini akan membantu Anda.


32
pip install -r requirements.txt

Untuk perincian lebih lanjut silakan periksa opsi bantuan.

pip install --help

Kita dapat menemukan opsi '-r'

-r, --requirement Instal dari file persyaratan yang diberikan. Opsi ini dapat digunakan beberapa kali.

Informasi lebih lanjut tentang beberapa opsi pemasangan pipa yang umum digunakan: (Ini adalah opsi bantuan pada perintah pemasangan pipa)

masukkan deskripsi gambar di sini

Juga di atas adalah set lengkap opsi. Silakan gunakan pip install --help untuk daftar opsi lengkap.


26

Jawaban singkat

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

atau dalam bentuk lain:

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

Penjelasan

Di sini, -radalah bentuk pendek --requirementdan meminta pipuntuk menginstal dari requirementsfile yang diberikan .

pipakan memulai instalasi hanya setelah memeriksa ketersediaan semua item yang terdaftar dalam requirementsfile dan itu tidak akan memulai instalasi bahkan jika requirementtidak tersedia.

Satu solusi untuk menginstal paket yang tersedia adalah menginstal paket yang terdaftar satu per satu. Gunakan perintah berikut untuk itu. Peringatan warna merah akan ditampilkan untuk memberi tahu Anda tentang paket yang tidak tersedia.

cat requirements.txt | xargs -n 1 pip install

Untuk mengabaikan komentar (baris dimulai dengan a #) dan baris kosong, gunakan:

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

20

Seringkali, Anda ingin menginstal cepat dari arsip lokal, tanpa memeriksa PyPI.

Pertama, unduh arsip yang memenuhi persyaratan Anda:

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

Kemudian, instal menggunakan –find-linksdan –no-index:

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

no such option: --download
Max Malysh

12

Saya bekerja dengan banyak sistem yang telah dipermainkan oleh pengembang "mengikuti petunjuk yang mereka temukan di internet". Sangat umum bahwa Anda pipdan Anda pythontidak melihat jalur / paket situs yang sama. Karena alasan ini, ketika saya menemukan keanehan, saya mulai dengan melakukan ini:

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

Itu adalah sistem yang membahagiakan .

Di bawah ini adalah sistem yang tidak bahagia . (Atau setidaknya itu adalah sistem yang sangat bodoh yang membuat orang lain tidak bahagia.)

$ 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

Itu tidak bahagia karena pip(python3.6 dan) using /usr/local/lib/python3.6/site-packageswhile pythonis (python2.7 and) using/usr/local/lib/python2.7/site-packages

Ketika saya ingin memastikan saya menginstal persyaratan ke python yang tepat , saya melakukan ini:

$ 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

Anda pernah mendengar, "Jika tidak rusak, jangan coba memperbaikinya." Versi DevOps itu adalah, "Jika Anda tidak memecahkannya dan Anda dapat mengatasinya, jangan mencoba memperbaikinya."


10

pertama-tama, buat lingkungan virtual

dalam python 3.6

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

dalam python 2.7

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

kemudian aktifkan lingkungan dan instal semua paket yang tersedia di file requirement.txt.

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

9

Menginstal file requirement.txt di dalam virtual env dengan python 3:

Saya memiliki masalah yang sama. Saya mencoba menginstal file requirement.txt di dalam lingkungan virtual. Saya menemukan solusinya.

Awalnya, saya membuat virtual env saya dengan cara ini:

virtualenv -p python3 myenv

Aktifkan lingkungan menggunakan:

source myenv/bin/activate

Sekarang saya menginstal persyaratan.txt menggunakan:

pip3 install -r requirements.txt

Instalasi berhasil dan saya dapat mengimpor modul.


Saya menghadapi masalah ini ketika menginstal file persyaratan di dalam lingkungan virtual. Saya sekarang telah memodifikasi respons saya untuk mengatasi masalah ini
janu777

1
Menggunakan Anaconda Python 3,6 pada Windows, saya harus melakukan virtualenv -p python myenv, myenv\Scripts\activate.bat,pip install -r requirements.txt
bdforbes

1
Sebenarnya, sebaliknya, ini tampak seperti satu-satunya jawaban yang tidak menjawab bagian dari pertanyaan tentang menginstal deps didefinisikan secara lokal di requirements.txtke virtualenv a. Kecuali saya kehilangan sesuatu? Bagaimanapun, terima kasih!
davnicwil

8

coba ini

python -m pip install -r requirements.txt

7
pip install --user -r requirements.txt 

ATAU

pip3 install --user -r requirements.txt 

apakah mungkin untuk menentukan file --userdi dalam requirements.txt?
liang
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.