Jak zainstalować pakiety za pomocą pip zgodnie z plikiem wymagań.txt z katalogu lokalnego?

1082

Oto problem

Mam wymagania.txt, które wygląda następująco:

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

Mam lokalny katalog archiwum zawierający wszystkie pakiety + inne.

Utworzyłem nowy virtualenv z

bin/virtualenv testing

po aktywacji próbowałem zainstalować pakiety zgodnie z wymaganiami.txt z lokalnego katalogu archiwum.

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

Mam trochę danych wyjściowych, które wydają się wskazywać, że instalacja jest w porządku

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

Jednak późniejsza kontrola wykazała, że ​​żaden z pakietów nie został poprawnie zainstalowany. Nie mogę zaimportować pakietu i żaden z nich nie został znaleziony w katalogu site-packages mojego virtualenv. Co poszło nie tak?

kakarukeys
źródło
4
Próbowałeś używać, --no-indexwięc nawet nie patrzy na PyPI?
Hugo Tavares
2
Usunąłeś komunikat o błędzie. Na ogół jest blisko dna.
bukzor
Możesz użyć ścieżek do plików zamiast nazw pakietów, co oznacza, że ​​będziesz musiał zmienić plik wymagania.txt, ale komenda pip install pozostanie taka sama.
asafge
9
Najbardziej zanotowana odpowiedź (jedna Mike Lyons) nawet nie odpowiada na pytanie . Czy mógłbyś zaakceptować poprawną odpowiedź Codeape?
Piotr Dobrogost
2
zaskoczony, nikt inny nie jest powiązany, ale pip.pypa.io/en/stable/user_guide/#requirements-files
MrMesees 25.04.16

Odpowiedzi:

785

To działa dla mnie:

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

--no-index- Zignoruj ​​indeks pakietu ( --find-linkszamiast tego patrzy tylko na adresy URL).

-f, --find-links <URL>- Jeśli adres URL lub ścieżka do pliku HTML, przeanalizuj łącza do archiwów. Jeśli lokalna ścieżka lub file://adres URL będący katalogiem, poszukaj archiwów na liście katalogów.

Codeape
źródło
7
Informacje na temat --no-indexpolecenia pip pomagają zainstalować --no-index indeks pakietu Ignoruj ​​( --find-linkszamiast tego patrząc tylko na adresy URL). Informacje --find-linksz polecenia pip pomóż zainstalować -f , --find-links <url>jeśli adres URL lub ścieżka do pliku HTML, to przeanalizuj łącza do archiwów. Jeśli lokalna ścieżka lub plik: // url jest katalogiem, poszukaj archiwów na liście katalogów.
AWrightIV
1
//, To może być bardzo eleganckie rozwiązanie, szczególnie biorąc pod uwagę odwieczną walkę z dostawcami: bitprophet.org/blog/2012/06/07/on-vendorizing
Nathan Basanese
Jedną ostrożnością przy tym jest to, że możesz pip install <some_module>bez tego używać, requirements.txtale to się nie zaktualizuje requirements.txt. Alternatywą może być aktualizacja dokera w taki sposób, aby zawierał listę wszystkich poleceń instalacji pip uruchomionych w celu zainstalowania zależności.
ampersands
próbowałem tego python -m pip install -r requirements.txtw aktywowanym środowisku venv. rzeczy zostały zainstalowane płynnie, ale kiedy robię listę pip, nie pokazuje tych pakietów, kiedy jestem w aktywnym venv, a nawet po dezaktywacji venv. także nie może korzystać z tych pakietów. nie wiem, co tu jest nie tak
Shreyan Mehta
Czy na pewno pythonodnosi się do pliku wykonywalnego Python w aktywowanym środowisku $ which python?
codeape
1363

Przeczytałem powyższe, zdaję sobie sprawę, że to stare pytanie, ale jest całkowicie nierozwiązane i wciąż znajduje się na szczycie moich wyników wyszukiwania Google, więc odpowiedź jest odpowiednia dla wszystkich:

pip install -r /path/to/requirements.txt
Mike Lyons
źródło
284
Zdaję sobie sprawę, że ta odpowiedź nie odnosi się do pierwotnego pytania, ale odpowiada na pytanie, które miałem, kiedy znalazłem to w Google ...
Jonathan
Pierwotne pytanie uległo zmianie - zauważ, jak teraz używa /path/to/requirements.txt.
Mike Lyons,
8
@MikeLyons całkiem pewne, że pytanie w rzeczywistości się nie zmieniło - nie ma historii edycji.
Mark Amery
48
dla tych, którzy lubią wiedzieć, co wpisują, -r w poleceniu oznacza po prostu „zainstaluj z pliku wymagań” i jest skrótem do --requ Wymagania
Florent Chatterji
2
Kiedy chcę zaktualizować pakiet (np. Django), zmieniam wersję w pliku wymagań.txt, a następnie uruchamiam pip install -r /path/to/requirements.txt. To wykrywa zmianę, aktualizuje pakiet i pozostawia wszystko inne w spokoju.
Użytkownik
129

Dla virtualenv, aby zainstalować wszystkie pliki w pliku wymagania.txt.

  1. cd do katalogu, w którym znajdują się wymagania.txt
  2. aktywuj virtualenv
  3. Uruchom: pip install -r requirements.txt w twojej powłoce
Aaron Lelevier
źródło
3
„Pyenv virtualenv pip install install.txt nie działa” ze względu na Google ...
Jerad
Działa dla mnie zamiast innych odpowiedzi, ty
Jo Eark
58

Miałem podobny problem. Próbowałem tego:

pip install -U -r requirements.txt 

(-U = aktualizacja, jeśli była już zainstalowana)

Ale problem trwał nadal. Uświadomiłem sobie, że niektóre ogólne biblioteki do opracowania zostały pominięte.

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

Nie wiem czy to by ci pomogło.

enriquetaso
źródło
32
pip install -r requirements.txt

Aby uzyskać więcej informacji, sprawdź opcję pomocy.

pip install --help

Możemy znaleźć opcję „-r”

-r, --requ Wymagania Zainstaluj z podanego pliku wymagań. Z tej opcji można korzystać wiele razy.

Dalsze informacje na temat niektórych często używanych opcji instalacji pip: (Jest to opcja pomocy w poleceniu pip install)

wprowadź opis zdjęcia tutaj

Powyżej znajduje się pełny zestaw opcji. Proszę użyć pip install --help, aby uzyskać pełną listę opcji.

Py_minion
źródło
26

Krótka odpowiedź

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

lub w innej formie:

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

Wyjaśnienie

Tutaj -rjest krótka forma --requirementi prosi pipo instalację z podanego requirementspliku.

pip rozpocznie instalację dopiero po sprawdzeniu dostępności wszystkich wymienionych elementów w requirements pliku i nie rozpocznie instalacji, nawet jeśli jeden requirementjest niedostępny.

Jednym z obejść instalowania dostępnych pakietów jest instalowanie wymienionych pakietów jeden po drugim. W tym celu użyj następującego polecenia. Zostanie wyświetlone ostrzeżenie w kolorze czerwonym, aby powiadomić Cię o niedostępnych pakietach.

cat requirements.txt | xargs -n 1 pip install

Aby zignorować komentarze (linie zaczynające się od a #) i puste linie, użyj:

cat requirements.txt | cut -f1 -d"#" | sed '/^\s*$/d' | xargs -n 1 pip install
Safwan
źródło
20

Często potrzebujesz szybkiej instalacji z lokalnych archiwów, bez sprawdzania PyPI.

Najpierw pobierz archiwa spełniające Twoje wymagania:

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

Następnie zainstaluj za pomocą –find-linksi –no-index:

$ pip install --no-index --find-links=[file://]<DIR> -r requirements.txt
Jadav Bheda
źródło
no such option: --download
Max Malysh
12

Pracuję z wieloma systemami, które zostały zmulone przez programistów „zgodnie z instrukcjami, które znaleźli w Internecie”. Niezwykle często zdarza się, że ty pipi ty pythonnie patrzysz na te same ścieżki / pakiety witryn. Z tego powodu, gdy napotykam dziwność, zaczynam od zrobienia tego:

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

To jest szczęśliwy system .

Poniżej znajduje się niezadowolony system . (A przynajmniej jest to błogo ignorancki system, który powoduje, że inni są nieszczęśliwi).

$ 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

Jest niezadowolony, ponieważ pipużywa (python3.6 i) /usr/local/lib/python3.6/site-packagespodczas korzystaniapython is (python2.7 i) używa/usr/local/lib/python2.7/site-packages

Kiedy chcę się upewnić, że instaluję wymagania dla odpowiedniego pytona, robię to:

$ 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

Słyszeliście: „Jeśli się nie zepsuło, nie próbuj go naprawiać”. Wersja DevOps brzmi: „Jeśli go nie złamałeś i możesz go obejść, nie próbuj go naprawiać”.

Bruno Bronosky
źródło
10

przede wszystkim stwórz wirtualne środowisko

w python 3.6

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

w python 2.7

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

następnie aktywuj środowisko i zainstaluj wszystkie pakiety dostępne w pliku wymagań.txt.

source <path/to/new/virtualenv>/bin/activate
pip install -r <path/to/requirement.txt>
Girish Vas
źródło
9

Instalowanie pliku wymagania.txt w wirtualnej env z Pythonem 3:

Miałem ten sam problem. Próbowałem zainstalować plik wymagania.txt w środowisku wirtualnym. Znalazłem rozwiązanie.

Początkowo stworzyłem moją wirtualną env w następujący sposób:

virtualenv -p python3 myenv

Aktywuj środowisko, używając:

source myenv/bin/activate

Teraz zainstalowałem wymagania.txt przy użyciu:

pip3 install -r requirements.txt

Instalacja zakończyła się powodzeniem i udało mi się zaimportować moduły.

janu777
źródło
Napotkałem ten problem podczas instalowania pliku wymagań w środowisku wirtualnym. Zmodyfikowałem teraz moją odpowiedź, aby rozwiązać problem
janu777,
1
Korzystanie Anakonda Pythona 3.6 na Windows, co musiałem zrobić virtualenv -p python myenv, myenv\Scripts\activate.bat,pip install -r requirements.txt
bdforbes
1
Wręcz przeciwnie, wydaje się, że jest to jedyna odpowiedź, która odpowiada na część pytania o instalację lokalnie zdefiniowanej zależności requirements.txtod virtualenv. Chyba że czegoś mi brakuje? W każdym razie dzięki!
davnicwil,
8

Spróbuj tego

python -m pip install -r requirements.txt
Jema
źródło
7
pip install --user -r requirements.txt 

LUB

pip3 install --user -r requirements.txt 
użytkownik 1460675
źródło
czy można określić plik --userwewnętrzny requirements.txt?
liang