используйте относительный путь в requirements.txt для установки файла tar.gz с помощью pip

Мы используем файл requirements.txt для хранения всех необходимых внешних модулей. Все модули, кроме одного, собираются из Интернета. Другой хранится в папке под той, где находится файл requirements.txt.

Кстати, этот модуль можно легко установить с помощью pip install

Я пробовал использовать это:

file:folder/module

или это:

file:./folder/module

или даже это:

folder/module

но всегда выдает ошибку. Кто-нибудь знает, как это правильно сделать?

Спасибо


person F.D.F.    schedule 21.03.2012    source источник


Ответы (4)


В текущей версии pip (1.2.1) способ интерпретации относительных путей в файле требований неоднозначен и частично нарушен. В репозитории pip есть открытая проблема, которая более подробно объясняет различные проблемы и неоднозначности:

https://github.com/pypa/pip/issues/328

Короче говоря, текущая реализация не соответствует описанию в документации по pip, поэтому на момент написания этой статьи не существовало последовательного и надежного способа использования относительных путей в requirements.txt.

ЭТО СКАЗАЛО, поместив в мой requirements.txt следующее:

./foo/bar/mymodule

работает, когда на верхнем уровне каталога mymodule есть setup.py. Обратите внимание на отсутствие обозначения протокола file:: и включение ведущего ./. Этот путь не относительно файла requirements.txt, а скорее к текущему рабочему каталогу. Поэтому необходимо перейти в тот же каталог, что и requirements.txt, а затем выполнить команду:

pip install -r requirements.txt
person finn    schedule 16.10.2012
comment
хотя ./, похоже, работает таким образом, ../ нет, даже не относительно CWD, и я пробовал ни то, ни другое ./../ - person dashesy; 06.01.2015
comment
Не знаю, в чем дело, но в Windows работало только -e ./foo/bar/mymodule вместо .\foo\bar\mymodule - person Chris; 09.08.2019
comment
Этот ответ от 2012 года, является ли файл requirements.txt все еще не поддерживающим относительный путь? - person Andrew Sasha; 05.12.2020
comment
2021 год, ../foo в файле requirements.txt работает с pip 18.1 - person RayLuo; 14.03.2021

Он основан на текущем рабочем каталоге (при необходимости найдите с помощью os.getcwd ()) и относительном пути, который вы указываете в файле требований.

Ваш файл требований должен выглядеть так:

fabric==1.13.1
./some_fir/some_package.whl
packaging==16.8

Обратите внимание, что это будет работать только для файлов .whl, а не для .exe.

Не забывайте следить за выводом pip install на предмет ошибок.

person frage    schedule 01.11.2018

У меня работала только директива file:. Это работает даже с AWS SAM, т.е. sam build. Вот мой requirements.txt, а englishapps - это мой собственный пакет Python, который мне нужен в AWS Lambda.

requests
file:englishapps-0.0.1-py3-none-any.whl
person Edgar Manukyan    schedule 16.12.2020

Другой вариант - использовать диспетчер среды под названием Pipenv для управления этим вариантом использования. Действия после выполнения pipenv install для нового проекта:

pipenv install -e app/deps/fastai (-e можно редактировать и не обязательно)

тогда вы увидите в своем Pip-файле следующую строку:
fastai = {editable = true,path = "./app/deps/fastai"}

вот похожие проблемы:

https://github.com/pypa/pipenv/issues/209#issuecomment-337409290 https://stackoverflow.com/a/53507226/7032846

person Aaron Soellinger    schedule 24.05.2020