Как установить пакеты с помощью pip в соответствии с файлом needs.txt из локального каталога?

1084

Вот проблема

У меня есть файл require.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

активировав его, я попытался установить пакеты в соответствии с require.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
....

Но более поздняя проверка показала, что ни один из пакетов не установлен должным образом. Я не могу импортировать пакет, и ни один не найден в каталоге site-packages моего virtualenv. Так что пошло не так?

kakarukeys
источник
4
Вы пробовали использовать, --no-indexчтобы он даже не смотрел на PyPI?
Уго Таварес
2
Вы перехватили сообщение об ошибке. Это вообще около дна.
Букзор
Вы можете использовать пути к файлам вместо имен пакетов, это означает, что вам придется изменить файл needs.txt, но оставить команду pip install такой же.
Asafge
9
Самый голосующий ответ (ответ Майка Лайонса) даже не отвечает на вопрос . Не могли бы вы принять ответ Codeape, который является правильным?
Петр Доброгост
2
удивил, что никто не связался, кроме pip.pypa.io/en/stable/user_guide/#requirements-files
MrMesees,

Ответы:

788

Это работает для меня:

$ 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 - это каталог, ищите архивы в списке каталогов.

codeape
источник
7
Информация --no-indexиз команды pip поможет установить --no-index Игнорировать индекс пакета ( --find-linksвместо просмотра только URL). Информация --find-linksиз команды pip help install -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когда в активированной среде venv. все установлено гладко, но когда я делаю список пипсов, он не показывает эти пакеты, когда я нахожусь в активном venv или даже после деактивации venv. также не может использовать эти пакеты. не знаю, что здесь не так
Shreyan Mehta
Вы уверены, pythonчто ссылаетесь на исполняемый файл python активированной среды ( $ which python)?
Codeape
1366

Я прочитал выше, понимаю, что это старый вопрос, но он полностью не решен и все еще находится в верхней части моих результатов поиска в Google, так что вот ответ, который работает для всех:

pip install -r /path/to/requirements.txt
Майк Лайонс
источник
284
Я понимаю, что этот ответ не относится к первоначальному вопросу, но он отвечает на вопрос, который у меня был, когда я нашел это в Google ...
Джонатан
8
@MikeLyons почти уверен, что вопрос на самом деле не изменился - истории изменений нет.
Марк Амери
49
для тех, кто любит знать, что они вводят, параметр -r в команде просто означает «установить из файла требований» и является ярлыком для --requirement
Florent Chatterji
2
Когда я хочу обновить пакет (например, Django), я меняю версию в моем файле needs.txt и затем запускаю pip install -r /path/to/requirements.txt. Это обнаруживает изменение, обновляет пакет и оставляет все остальное в покое.
Пользователь
1
в то время как это обычно работает, пара тонкостей делает его неудачным. Если какая-либо установка не удалась для пакетов в requirements.txt, ни один из них не будет установлен. Если требуемый модуль импортирует зависимость во время установки (вместо того, чтобы просто указать ее как требование), он потерпит неудачу, даже если зависимость предшествует ему в списке зависимостей, что приведет к сбою всех модулей. Вероятно, ошибка при импорте зависимого модуля во время установки, но также неожиданно, что перечисленные зависимости requirements.txtне устанавливаются последовательно, а сразу.
Игги
130

Для virtualenv необходимо установить все файлы в файл needs.txt.

  1. Перейдите в каталог, где расположен файл require.txt.
  2. активировать ваше virtualenv
  3. запустить: pip install -r requirements.txt в вашей оболочке
Аарон Лелевье
источник
3
"pyenv virtualenv pip install require.txt не работает" ради Google ...
Джерад
У меня это работает вместо других ответов, ты
Джо Иарк
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

Я не знаю, поможет ли это тебе.

enriquetaso
источник
32
pip install -r requirements.txt

Для получения более подробной информации, пожалуйста, проверьте вариант справки.

pip install --help

Мы можем найти опцию '-r'

-r, --requirement Установить из данного файла требований. Эта опция может быть использована несколько раз.

Дополнительная информация о некоторых часто используемых опциях установки pip: (Это опция справки в команде pip install)

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

Также выше приведен полный набор опций. Пожалуйста, используйте pip install --help для получения полного списка опций.

Py_minion
источник
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

Чтобы игнорировать комментарии (строки, начинающиеся с a #) и пустые строки, используйте:

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 and) использует /usr/local/lib/python3.6/site-packageswhile pythonis (python2.7 and) using/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/>

затем активируйте среду и установите все пакеты, доступные в файле require.txt.

source <path/to/new/virtualenv>/bin/activate
pip install -r <path/to/requirement.txt>
Гириш Вас
источник
9

Установка файла needs.txt в виртуальной среде с Python 3:

Я была такая же проблема. Я пытался установить файл needs.txt в виртуальной среде. Я нашел решение.

Первоначально я создал свою виртуальную среду таким образом:

virtualenv -p python3 myenv

Активируйте среду, используя:

source myenv/bin/activate

Теперь я установил файл require.txt, используя:

pip3 install -r requirements.txt

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

janu777
источник
Я столкнулся с этой проблемой при установке файла требований в виртуальной среде. Теперь я изменил свой ответ для решения проблемы
janu777
1
Использование Анаконды Python 3.6 на Windows, я должен был сделать virtualenv -p python myenv, myenv\Scripts\activate.bat,pip install -r requirements.txt
bdforbes
1
На самом деле, наоборот, это кажется единственным ответом, который действительно отвечает на часть вопроса об установке локально определенных deps в requirements.txtvirtualenv. Если я что-то упустил? В любом случае, спасибо!
Давник будет
8

попробуй это

python -m pip install -r requirements.txt
Jema
источник
7
pip install --user -r requirements.txt 

ИЛИ

pip3 install --user -r requirements.txt 
user1460675
источник
можно указать --userвнутри requirements.txtфайла?
Лян