Скрипт после установки с Python setuptools



3 Answers

Это единственная стратегия, которая работала для меня, когда сценарий после установки требует, чтобы уже были установлены зависимости пакета:

import atexit
from setuptools.command.install import install


def _post_install():
    print('POST INSTALL')


class new_install(install):
    def __init__(self, *args, **kwargs):
        super(new_install, self).__init__(*args, **kwargs)
        atexit.register(_post_install)


setuptools.setup(
    cmdclass={'install': new_install},
python setuptools software-distribution setup.py pypi

Можно ли указать пост-установочный файл сценария Python как часть файла setup.py setuptools, чтобы пользователь мог запустить команду:

python setup.py install

в локальном архиве файлов проекта или

pip install <name>

для проекта PyPI, и скрипт будет запущен при завершении стандартной установки setuptools? Я хочу выполнить задачи после установки, которые могут быть закодированы в одном файле сценария Python (например, доставить пользовательское сообщение после установки пользователю, вытащить дополнительные файлы данных из другого репозитория удаленных источников).

Я наткнулся на этот ответ SO от нескольких лет назад, который затрагивает тему, и звучит так, как будто в то время консенсус заключался в том, что вам нужно создать подкоманду установки. Если это так, то возможно ли кому-нибудь дать пример того, как это сделать, чтобы пользователю не нужно вводить вторую команду для запуска скрипта?




Я думаю, что самый простой способ выполнить пост-установку и сохранить требования - украсить вызов setup(...) :

from setup tools import setup


def _post_install(setup):
    def _post_actions():
        do_things()
    _post_actions()
    return setup

setup = _post_install(
    setup(
        name='NAME',
        install_requires=['...
    )
)

Это приведет к запуску setup() при объявлении setup . После выполнения установки требований будет запущена _post_install() , которая будет запускать внутреннюю функцию _post_actions() .




Если вы используете atexit, нет необходимости создавать новый cmdclass. Вы можете просто создать свой регистр atexit прямо перед вызовом setup (). Он делает то же самое.

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




Related