Можно ли устанавливать пакеты с помощью pip из локальной файловой системы?
Я запустил python setup.py sdist
свой пакет, в котором был создан соответствующий файл tar.gz. Этот файл хранится в моей системе по адресу /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Теперь в виртуальной среде я хотел бы установить пакеты, поступающие из pypi или из определенного локального местоположения /srv/pkg
.
Это возможно?
PS
знаю что могу уточнить pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Это будет работать, но я говорю об использовании /srv/pkg
местоположения в качестве другого места для поиска пункта, если я наберу pip install mypackage
.
pip install <Path-to-WHL-file>
.Ответы:
Я уверен, что то, что вы ищете, называется
--find-links
опцией.Хотя вам может потребоваться создать пустышку
index.html
для локального индекса пакета, в котором перечислены ссылки на все пакеты. Этот инструмент помогает:https://github.com/wolever/pip2pi
источник
pip install mypackage --no-index --find-links file:///srv/pkg/mypackage
должно сработать.easy_install --allow-hosts=None --find-links file:///srv/pkg/mypackage mypackage
--find-links
поиск в PyPI все еще будет разрешен, если пакет не найден в указанном месте или доступна более новая версия. В Windows я считаю, что объединение этого с--only-binary=packagename
(или--only-binary=:all:
) чрезвычайно полезно. Это предотвращает попытку загрузки pip любых пакетов с нативными зависимостями, которые имеют только исходные дистрибутивы на PyPI (и, следовательно, требуют компиляции), что является наиболее распространенной причиной, по которой я пытаюсь установить установку из каталога. В отличие от этого--no-index
, я все еще могу устанавливать другие пакеты из PyPI.Что о::
например,
pip install -e /srv/pkg
где / srv / pkg - это каталог верхнего уровня, где находится файл «setup.py».
источник
--editable
это то, что он, похоже, просматривает каталог локального пакета и устанавливает источник как git-репо, если он есть - немного более гибкий, чем просто папка. Я не могу найти документацию для этого, хотя.do pip install -e
проверяю код с удаленного git, я хотел бы установить код как есть (с изменениями еще не в удаленном).Я устанавливаю,
pyfuzzy
но не в PyPI; он возвращает сообщение:No matching distribution found for pyfuzzy
.Я попробовал принятый ответ
Но он тоже не работает и возвращает следующую ошибку:
Наконец, я нашел простой хороший способ: https://pip.pypa.io/en/latest/reference/pip_install.html.
Так у меня сработала следующая команда:
Надеюсь, это поможет вам.
источник
Could not find a version that satisfies
ошибке. Спасибо.Это решение, которое я в конечном итоге использовал:
Я собрал это воедино из примеров установки pip, а также из ответа Рикарда на другой вопрос . Аргумент "--pre" позволяет вам установить непроизводственные версии. Аргумент "--no-index" избегает поиска индексов PyPI. "--Find-links =." поиск аргументов в локальной папке (это может быть относительным или абсолютным). Я использовал аргументы "--log-file", "log.txt" и "-vv" для отладки. Аргумент "--upgrade" позволяет вам устанавливать более новые версии поверх старых.
Я также нашел хороший способ удалить их. Это полезно, когда у вас есть несколько разных сред Python. Это тот же базовый формат, просто с использованием «удалить» вместо «установить», с мерой безопасности для предотвращения непреднамеренного удаления:
Локальная папка содержит следующие файлы: install.py, uninstall.py, mypackagename-1.0.zip
источник
Опция --find-links делает свою работу и работает из
requirements.txt
файла!Вы можете поместить архивы пакетов в какую-то папку и взять последнюю, не изменяя файл требований, например
requirements
:Сейчас на
requirements/base.txt
месте:Удобный способ обновить проприетарные пакеты, просто добавьте новый в папку
Таким образом, вы можете установить пакеты из
local folder
ANDpypi
одним и тем же вызовом:pip install -r requirements/production.txt
PS. См. Мою ветку cookiecutter-djangopackage, чтобы узнать, как разделить требования и использовать организацию требований на основе папок.
источник
На странице установки пакетов вы можете просто запустить:
где / srv / pkg / mypackage - это каталог, содержащий setup.py .
Дополнительно 1 , вы можете установить его из архива:
1 Хотя отмечается в вопросе, из-за его популярности, он также включен.
источник
Предполагая, что у вас есть virtualenv и
requirements.txt
файл, вы можете определить внутри этого файла, где взять пакеты:источник
Наличие требований в
requirements.txt
иegg_dir
в качестве каталогаВы можете создать свой локальный кеш:
$ pip download -r requirements.txt -d eggs_dir
затем, используя этот «кеш» просто:
$ pip install -r requirements.txt --find-links=eggs_dir
источник
Для установки только из локальной сети вам нужно 2 варианта:
--find-links
: где искать зависимости. Нет необходимости вfile://
префиксе, упомянутом другими.--no-index
: не ищите в индексах pypi отсутствующие зависимости (зависимости не установлены и не указаны в--find-links
пути).Таким образом, вы можете запустить из любой папки следующее:
Если ваш mypackage настроен правильно, он перечислит все его зависимости, и если вы использовали pip download для загрузки каскада зависимостей (т.е. зависимостей зависимостей и т. Д.), Все будет работать.
Если вы хотите использовать индекс pypi, если он доступен, но в противном случае можете использовать запасные колеса, вы можете удалить
--no-index
и добавить--retries 0
. Вы увидите pip pause на некоторое время, пока он попытается проверить pypi на наличие отсутствующей зависимости (одна не установлена), и когда он обнаружит, что не может ее достичь, вернется к локальной. Кажется, нет способа сказать pip «сначала искать локальные, а затем индекс».источник
Я пытался достичь чего-то действительно простого и с треском провалился, возможно, я глупый.
В любом случае, если у вас есть скрипт,
Dockerfile
который загружает zip-файл пакета Python (например, с GitHub), и затем вы хотите установить его, вы можете использоватьfile:///
префикс для его установки, как показано в следующем примере :ПРИМЕЧАНИЕ : я знаю, что вы можете установить пакет сразу, используя,
pip install https://example.com/mypackage.zip
но в моем случае я хотел проверить контрольную сумму (никогда не бывает достаточно параноидальной) и потерпел неудачу при попытке использовать различные опции, которые предоставляет pip /#md5
фрагмент.Было удивительно неприятно делать что-то такое простое напрямую
pip
. Я просто хотел пройти контрольную сумму иpip
убедиться, что почтовый индекс совпадает, прежде чем устанавливать его.Я, вероятно, делал что-то очень глупое, но в конце концов я сдался и выбрал это. Я надеюсь, что это помогает другим, пытающимся сделать что-то подобное.
источник