5

Установка пакетов Python из локальной папки в virtualenv с помощью pip

16

Проблема: Установка пакетов с помощью 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 ответ(ов)

6

Команда 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. Установка в редактируемом режиме позволит вам вносить изменения в код проекта и сразу видеть их результат без необходимости повторной установки.

2

Вы правы, то, что вам нужно, называется параметр --find-links.

Вы можете сделать это следующим образом:

pip install mypackage --no-index --find-links file:///srv/pkg/mypackage

Этот способ позволит вам установить пакет mypackage, указав локальный путь к файлу без использования PyPI.

0

Если вы пытаетесь установить pyfuzzy, но он отсутствует в PyPI, и вы получаете сообщение об ошибке No matching distribution found for pyfuzzy, вот несколько шагов, которые могут помочь.

  1. Первым делом убедитесь, что у вас есть правильная версия пакета. Часто можно скачать pyfuzzy из репозитория, например, с GitHub.

  2. Если вы уже скачали архив с pyfuzzy, попробуйте установить его, указав путь к файлу напрямую, как это описано в документации pip. Например, команду, которую вы использовали:

    pip install ./downloads/SomePackage-1.0.4.tar.gz
    

    Вы можете адаптировать это для вашего случая. Вместо этого попробуйте следующую команду:

    pip install ../pyfuzzy-0.1.0.tar.gz
    
  3. Если у вас есть локальный дистрибутив, убедитесь, что вы указываете на правильный путь. Также стоит проверить, что версия Python, под управлением которой выполняется pip, совместима с пакетом.

  4. Если у вас все еще возникают проблемы, попробуйте запустить команду с флагом --no-index, чтобы избежать обращений к PyPI:

    pip install --no-index --find-links=file:///путь/к/вашему/файлу/ pyfuzzy
    

    Замените /путь/к/вашему/файлу/ на фактический путь к папке, где находится ваш архив pyfuzzy.

Если после всех этих шагов проблема не решена, возможно, пакет не поддерживает вашу версию Python, и имеет смысл проверить документацию или репозиторий пакета для получения более подробной информации. Надеюсь, это поможет вам!

0

Чтобы установить пакеты только из локального источника, вам понадобятся две опции:

  • --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 сначала искать локальные пакеты, а затем в индексе.

0

Для создания локального кэша, имея файл requirements.txt и каталог egg_dir, вы можете выполнить следующую команду:

$ pip download -r requirements.txt -d eggs_dir

Затем, чтобы использовать этот "кэш", достаточно выполнить следующую команду:

$ pip install -r requirements.txt --find-links=eggs_dir

Это позволит pip устанавливать пакеты из локального каталога eggs_dir, если они там есть, что может ускорить процесс установки и помочь избежать проблем с доступом к интернету.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь