Код внутри setup.py вызывается только во время сборки? или также во время установки? - PullRequest
0 голосов
/ 12 октября 2019

Чтобы построить дистрибутив пакета, мы вызываем файл setup.py, используя:

python3 setup.py sdist, затем вызывается код внутри setup.py и создается дистрибутив.

Теперь есть 2 способа установки:

  1. pip install ./dist/SomeProject-1.0.4.tar.gz

  2. pip install.

Вызывается ли файл setup.py во время установки с использованием обоих вышеперечисленных методов? (я добавил оператор print в файл setup.py и заметил, что онотображается во время сборки, но не во время установки)

Но в документации сказано: «Сценарий установки обычно довольно прост, хотя, поскольку он написан на Python, нет никаких произвольных ограничений на то, что вы можете с ним делать, хотя выследует соблюдать осторожность при размещении в сценарии установки сколь угодно дорогих операций. В отличие, скажем, от сценариев настройки в стиле Autoconf, сценарий установки может запускаться несколько раз в ходе сборки и установки дистрибутива модуля."https://docs.python.org/3/distutils/introduction.html#a-simple-example

Я хочу запускать некоторый пользовательский код в файле setup.py только во время сборки, а не во время установки. Возможно ли это?

1 Ответ

0 голосов
/ 12 октября 2019

Код внутри setup.py вызывается только во время сборки? или также во время установки?

Это зависит ...

Если вы используете setuptools для установки проекта (setup.py install или easy_install), то вашsetup.py наиболее вероятно выполняется в время установки . Если вы используете pip для его установки, то ваш setup.py, скорее всего, не будет запущен в время установки .

Вы должны ограничить пользовательские шаги до построить операции, которые вы имеете под контролем. Как только вы публикуете дистрибутивы вашего проекта, вы почти не контролируете, что именно происходит.

Я хочу запускать некоторый пользовательский код в файле setup.py только во время сборки, а не во время установки. Возможно ли это?

Да. Вам необходимо настроить соответствующую команду.

Вот пример, показывающий, как создать новую пользовательскую команду build_something, которая также добавляется как подкоманда команды по умолчанию build:

#!/usr/bin/env python3

import distutils.command.build
import setuptools

class build_something(setuptools.Command):
    user_options = []
    def initialize_options(self):
        pass
    def finalize_options(self):
        pass
    def run(self):
        print(" *** build_something ***")

class build(distutils.command.build.build):
    _sub_command = (
        'build_something',
        None,
    )
    _sub_commands = distutils.command.build.build.sub_commands
    sub_commands = [_sub_command] + _sub_commands

setuptools.setup(
    name='Thing',
    version='0.0.0',
    cmdclass={
        'build_something': build_something,
        'build': build,
    },
)
...