Установка пакетов 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 переустановить текущую версию?
Как справиться с несколькими версиями Python и PIP?
Как исправить ошибку "error: externally-managed-environment" при использовании pip 3?
'pip' не распознан как командa внутреннего или внешнего формата
"Попытка установить pymssql на Ubuntu 12.04 с помощью pip"