Установка пакетов Python из локальной папки в virtualenv с помощью pip
Проблема: Установка пакетов с помощью pip из локальной файловой системы
Можно ли устанавливать пакеты с помощью pip из локальной файловой системы?
Я выполнил команду python setup.py sdist
, которая создала соответствующий файл tar.gz. Этот файл хранится на моем компьютере по следующему пути: /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Теперь в виртуальной среде мне хотелось бы устанавливать пакеты как из PyPI, так и из конкретного локального расположения /srv/pkg
.
Это возможно?
P.S.
Я знаю, что могу указать команду pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
, и это сработает, но я имею в виду использование каталога /srv/pkg
в качестве дополнительного места для поиска пакетов, если я введу команду pip install mypackage
.
5 ответ(ов)
Команда pip install --help
предоставляет информацию о различных параметрах, доступных для использования с pip install
. Один из этих параметров:
-e, --editable <path/url> Установить проект в редактируемом режиме (т.е. в "режиме разработки" setuptools) из локального пути к проекту или URL VCS.
Это означает, что вы можете установить проект в редактируемом режиме, указывая путь к директории, содержащей файл setup.py
, или URL, указывающий на систему управления версиями (например, Git).
Пример использования:
pip install -e /srv/pkg
где /srv/pkg
— это корневая директория вашего проекта, в которой находится файл setup.py
. Установка в редактируемом режиме позволит вам вносить изменения в код проекта и сразу видеть их результат без необходимости повторной установки.
Вы правы, то, что вам нужно, называется параметр --find-links
.
Вы можете сделать это следующим образом:
pip install mypackage --no-index --find-links file:///srv/pkg/mypackage
Этот способ позволит вам установить пакет mypackage
, указав локальный путь к файлу без использования PyPI.
Если вы пытаетесь установить pyfuzzy
, но он отсутствует в PyPI, и вы получаете сообщение об ошибке No matching distribution found for pyfuzzy
, вот несколько шагов, которые могут помочь.
Первым делом убедитесь, что у вас есть правильная версия пакета. Часто можно скачать
pyfuzzy
из репозитория, например, с GitHub.Если вы уже скачали архив с
pyfuzzy
, попробуйте установить его, указав путь к файлу напрямую, как это описано в документацииpip
. Например, команду, которую вы использовали:pip install ./downloads/SomePackage-1.0.4.tar.gz
Вы можете адаптировать это для вашего случая. Вместо этого попробуйте следующую команду:
pip install ../pyfuzzy-0.1.0.tar.gz
Если у вас есть локальный дистрибутив, убедитесь, что вы указываете на правильный путь. Также стоит проверить, что версия Python, под управлением которой выполняется
pip
, совместима с пакетом.Если у вас все еще возникают проблемы, попробуйте запустить команду с флагом
--no-index
, чтобы избежать обращений к PyPI:pip install --no-index --find-links=file:///путь/к/вашему/файлу/ pyfuzzy
Замените
/путь/к/вашему/файлу/
на фактический путь к папке, где находится ваш архивpyfuzzy
.
Если после всех этих шагов проблема не решена, возможно, пакет не поддерживает вашу версию Python, и имеет смысл проверить документацию или репозиторий пакета для получения более подробной информации. Надеюсь, это поможет вам!
Чтобы установить пакеты только из локального источника, вам понадобятся две опции:
--find-links
: указывает, где искать зависимости. Не нужно использовать префиксfile://
, о котором упоминают другие.--no-index
: не искать в индексах PyPI отсутствующие зависимости (зависимости, которые не установлены и не находятся по указанному пути--find-links
).
Таким образом, вы можете выполнить команду из любой папки:
pip install --no-index --find-links /srv/pkg /path/to/mypackage-0.1.0.tar.gz
Если ваш пакет mypackage
настроен правильно, он будет перечислять все свои зависимости, и если вы использовали команду pip download
, чтобы загрузить все цепочки зависимостей (то есть зависимости зависимостей и так далее), все будет работать.
Если вы хотите использовать индекс PyPI при его доступности, но переключаться на локальные колеса при недоступности, вы можете убрать --no-index
и добавить --retries 0
. Вы увидите, как pip приостановится на некоторое время, пытаясь проверить PyPI на наличие отсутствующей зависимости (той, которая не установлена), и когда он поймет, что не может его достать, вернется к локальным источникам. К сожалению, не существует метода, который позволил бы pip сначала искать локальные пакеты, а затем в индексе.
Для создания локального кэша, имея файл requirements.txt
и каталог egg_dir
, вы можете выполнить следующую команду:
$ pip download -r requirements.txt -d eggs_dir
Затем, чтобы использовать этот "кэш", достаточно выполнить следующую команду:
$ pip install -r requirements.txt --find-links=eggs_dir
Это позволит pip устанавливать пакеты из локального каталога eggs_dir
, если они там есть, что может ускорить процесс установки и помочь избежать проблем с доступом к интернету.
Узнать, какая версия пакета установлена с помощью pip
Как заставить pip переустановить текущую версию?
Как справиться с несколькими версиями Python и PIP?
Как исправить ошибку "error: externally-managed-environment" при использовании pip 3?
Можно ли использовать pip для установки пакета из приватного репозитория GitHub?