Як встановити пакети за допомогою pip відповідно до файлу вимог.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
...

У мене є локальний каталог архівів, який містить усі пакунки + інші.

Я створив новий віртуаленв з

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?
Уго Таварес

2
Ви відірвали повідомлення про помилку. Це, як правило, біля дна.
bukzor

Ви можете використовувати шляхи до файлів замість імен пакунків, це означає, що вам доведеться змінити файл вимоги.txt, але зберегти команду встановлення pip такою ж.
asafge

9
Найбільш голосована відповідь (одна Майка Ліонса) навіть не відповідає на запитання . Чи можете ви прийняти відповідь кодексу, яка є правильною?
Пьотр Доброгост

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-linksзамість перегляду URL-адрес).

-f, --find-links <URL>- Якщо URL-адреса або шлях до html-файлу, тоді розбирайте посилання на архіви. Якщо локальний шлях або file://URL-адреса - це каталог, шукайте архіви в списку каталогів.


7
Інформація про --no-indexкомандний піп допомагає встановити --no-index індекс Ігнорувати пакет ( --find-linksзамість цього переглядаючи лише URL-адреси). Інформація про --find-linksкомандний pip допоможе встановити -f , --find-links <url>Якщо URL-адреса або шлях до html-файлу, то розберіть посилання на архіви. Якщо локальний шлях або файл: // url - це каталог, то шукайте архіви в списку каталогів.
AWrightIV

1
//, Це може бути дуже елегантним рішенням, особливо з огляду на вічну боротьбу з вендорізацією: bitprophet.org/blog/2012/06/07/on-vendorizing
Натан Басанес

Обережно з цим ви можете, pip install <some_module>не використовуючи, requirements.txtале це не оновиться requirements.txt. Альтернативою може бути оновлення докера таким чином, щоб воно перераховувало всі команди встановлення pip, які виконуються для встановлення залежностей.
амперсанд

Я спробував це, python -m pip install -r requirements.txtколи всередині активованого оточення Венв. все встановлено гладко, але коли я роблю піп-лист, він не показує, що пакунки, коли я перебуваю в активному Венве або навіть після деактивації ВНЕВ. також не в змозі використовувати ці пакети. не знаю, що тут не так
Shreyan Mehta

Ви впевнені, що pythonстосується виконуваного файлу python ( $ which python) активованого середовища ?
кодап

1363

Я прочитав вище, зрозумів, що це давнє запитання, але це абсолютно не вирішено і все ще знаходиться на вершині моїх результатів пошуку в Google, тож ось відповідь, яка працює для всіх:

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

284
Я усвідомлюю, що ця відповідь не стосується початкового питання, але відповідає на питання, яке виникло, коли я виявив це в Google ...
Джонатан

Оригінальне запитання змінилося - зауважте, як він зараз використовує /path/to/requirements.txt.
Майк Ліонс

8
@MikeLyons впевнений, що питання насправді не змінилося - історії редагування немає.
Марк Амері

48
для тих, хто любить знати, що вони вводять, команда -r просто означає «встановити з файлу вимог», і це ярлик для --requirement
Florent Chatterji

2
Коли я хочу оновити пакет (наприклад, Django), я змінюю версію у своєму файлі вимог.txt, а потім запускаю pip install -r /path/to/requirements.txt. Це виявляє зміни, оновляє пакет і залишає все інше.
Користувач

129

Щоб virtualenv встановив усі файли у файлі вимоги.txt.

  1. cd в каталог, де розміщено Requires.txt
  2. активуйте свою віртуолв
  3. запустити: pip install -r requirements.txt у своїй оболонці

3
"pyenv virtualenv pip install settings.txt не працює" заради Google ...
Jerad

Це працює для мене замість інших відповідей, ти
Джо Еарк

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)

введіть тут опис зображення

Також вище - це повний набір варіантів. Будь ласка, використовуйте pip install --help для повного переліку параметрів.


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
Макс Малиш

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

насамперед, створити віртуальне середовище

в пітоні 3.6

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

в пітоні 2.7

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

потім активізуйте середовище та встановіть усі наявні пакети у файлі requ.txt.

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

9

Встановлення вимоги файл.txt у віртуальний env з python 3:

У мене було те саме питання. Я намагався встановити файл вимоги.txt всередині віртуального середовища. Я знайшов рішення.

Спочатку я створив свою віртуальну програму таким чином:

virtualenv -p python3 myenv

Активуйте оточення за допомогою:

source myenv/bin/activate

Тепер я встановив вимоги.txt, використовуючи:

pip3 install -r requirements.txt

Установка пройшла успішно, і мені вдалося імпортувати модулі.


Я зіткнувся з цією проблемою під час встановлення файлу вимог у віртуальному середовищі. Зараз я змінив свою відповідь на вирішення цього питання
січень777,

1
Використання Анаконди Python 3.6 на Windows, я повинен був зробити virtualenv -p python myenv, myenv\Scripts\activate.bat,pip install -r requirements.txt
bdforbes

1
Насправді, навпаки, це здається єдиною відповіддю, яка відповідає на частину питання про встановлення локально визначених деп-станцій requirements.txtдо virtualenv. Якщо я щось не пропускаю? У будь-якому випадку, дякую!
davnicwil


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.