Создайте файл require.txt из неустановленного колеса - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь создать список требований из локального неустановленного колеса.Было бы просто получить список, который был передан в качестве параметра packages в setuptools.setup -call setup.py.Вывод, который pip freeze сгенерирует, если колесо будет установлено, тоже может работать.


Чуть больше контекста

Я хочу создать образ докера, который будет использоватьсяв цепи CI.Чтобы сократить время конвейера, он должен быть загружен заранее всеми зависимостями времени выполнения.Но в тот момент, когда образ создается, пакет python еще не собран, и сборка пакета вне цепочки просто для получения requirements.txt является громоздкой и подверженной ошибкам.

То, что я пробовал

Взломать его в Dockerfile :

python -c $'\
import setuptools\n\
setuptools.setup = lambda *args, **kwargs: None\n\
exec(compile(open("setup.py").read(), "setup.py", "exec"))\n\
for requirement in requirements: print(requirement)\n' > python_packages.txt
# `requirements` is the name of variable that holds the package list 

Это не очень хорошо работает, потому что Docker делает странные вещи со своим контекстом сборки.Наличие любого кода в setup.py, обращающегося к локальным файлам (например, например, выбор номера текущей версии из файла VERSION), нарушает этот хак.

Исправление контекста сборки docker таким образом, чтобы этот кодРаботы решат мою проблему, но я бы предпочел правильное решение, которое не подразумевает, как вещи выглядят в setup.py.

Использование pip / pipreqs / pipenv / pipdeptree :

Все эти инструменты работают поверх локальной среды и не могут работать с неустановленным колесом. Этот ответ подходит довольно близко, используя pip, но 1) работает только в том случае, если пакет загружен в pyPI (что не является моим целевым пакетом), и 2) выполняет здоровенную сухую сборку, чтобы получить пакетсписок.

1 Ответ

0 голосов
/ 04 октября 2018

Мой проект johnnydep имеет именно эту функцию для генерации зависимостей из удаленного файла колеса.

pip install johnnydep
johnnydep your-wheel-file.whl --output-format=pinned

Демонстрация:

$ johnnydep johnnydep-0.5-py2.py3-none-any.whl --output-format pinned
johnnydep==0.5
anytree==2.4.3
cachetools==2.1.0
colorama==0.3.9
oyaml==0.7
packaging==18.0
pip==18.0
pkginfo==1.4.2
pytoml==0.1.19
setuptools==40.4.3
structlog==18.2.0
tabulate==0.8.2
wheel==0.32.1
wimpy==0.4
six==1.11.0
pyyaml==3.13
pyparsing==2.2.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...