Автоматизация пост-установки зависимости Python от Git с помощью Poetry

Я использую Poetry для управления зависимостями Python вместе с PyCrate для кодирования / декодирования ASN.1.

PyCrate - это зависимость, извлеченная из GitHub, и после извлечения из GitHub она устанавливается путем запуска установочного файла в каталоге PyCrate.

python setup.py install

Я хотел бы по возможности интегрировать этап установки в свой pyproject.toml. Мой текущий pyproject.toml включает PyCrate следующим образом:

…
[tool.poetry.dependencies]
pycrate = {git = "https://github.com/P1sec/pycrate.git"}
…

Это приведет к извлечению PyCrate из репозитория GitHub, но в папку src в virtualenv, созданном Poetry.

Есть ли способ автоматически запустить сценарий установки при выполнении poetry install? Я пытался использовать сценарии поэзии, но не смог получить это на данный момент работает правильно.

Моя текущая установка включает запуск poetry install, а затем ручной запуск setup.py install для PyCrate, однако я хотел бы, чтобы мой poetry install выполнил полную настройку, если это возможно.

Любая помощь в этом будет принята с благодарностью.


person rmc93    schedule 27.11.2019    source источник


Ответы (1)


Поэзия уже должна запускаться python setup.py install за вас, когда вы запускаете poetry install.

Поэзия в основном просто запускает pip install package, который загружает пакет, и, по сути, просто запускает python setup.py install в пакете!

Под капотом [pip] будет работать python setup.py install

Источник: https://stackoverflow.com/a/15732821/10149169

Однако поэзия устанавливает пакет только в изолированной виртуальной среде, чтобы не загрязнять остальную часть вашего компьютера.

Чтобы запустить что-то с поэзией, вам нужно запустить это с помощью poetry run YOUR_COMMAND

Чтобы запустить сценарий внутри виртуальной среды, необходимо запустить poetry shell, чтобы войти в виртуальную среду, или poetry run YOUR_COMMAND. Например. чтобы запустить сценарий Python, вы должны сделать poetry run python your_python_script.py

Пример

Если у вас есть папка со следующим файлом pyproject.toml:

[tool.poetry]
name = "test"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.6"
pycrate = {git = "https://github.com/P1sec/pycrate.git"}

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

После запуска poetry install вы можете получить доступ ко всем скриптам pyrcrate, запустив poetry run SCRIPT_NAME:

# works because pycrate_showmedia.py was installed with poetry install
me@computer:~/example-project$ poetry run poetry run pycrate_showmedia.py
usage: pycrate_showmedia.py [-h] [-bl BL] [-wt] input
pycrate_showmedia.py: error: the following arguments are required: input

Если у вас есть файл Python, который импортирует библиотеку pycrate, его также необходимо запустить с помощью poetry run:

me@computer:~/example-project$ cat test.py 
import pycrate_core
print(pycrate_core.__version__)
me@computer:~/example-project$ poetry run python test.py
person Alois Klink    schedule 02.12.2019
comment
Прекрасно, спасибо за такое подробное объяснение! - person rmc93; 05.12.2019
comment
Я сбит с толку, похоже, это не автоматизировано. Если я отправлю этот пакет кому-то другому, ему также придется запустить poetry run post-install.py - person Isaiah Shiner; 17.01.2020
comment
Привет, @IsaiahShiner, автор спрашивал об автоматической установке зависимостей с использованием поэзии, что предполагает, что все зависимости могут быть установлены через pip, например запустив python setup.py install. Пакеты Python обычно не содержат post-install.py скрипта, поскольку все, что есть в нем, можно просто добавить в конец setup.py файла. - person Alois Klink; 17.01.2020
comment
Ах, теперь я понимаю, о чем спрашивал автор. Полагаю, у меня другой вопрос: как добавить в setup.py поэзию, если нет setup.py. Я не могу найти никакой информации по этому поводу. - person Isaiah Shiner; 18.01.2020
comment
@AloisKlink Я создал свой собственный вопрос: https://stackoverflow.com/questions/59802468/post-install-script-with-python-poetry - person Isaiah Shiner; 18.01.2020