Подтвердить что ты не робот

Как выполнить пользовательские шаги сборки в setup.py?

Модуль distutils позволяет включать и устанавливать файлы ресурсов вместе с модулями Python. Как правильно включить их, если файлы ресурсов должны быть созданы во время процесса сборки?

Например, проект представляет собой веб-приложение, которое содержит источники CoffeeScript, которые затем должны быть скомпилированы в JavaScript и включены в пакет Python. Есть ли способ интегрировать это в обычный процесс sdist/bdist?

4b9b3361

Ответ 1

Лучший способ - написать пользовательскую команду build_coffeescript и сделать ее подкомандой сборки. Более подробные сведения приведены в других ответах на похожие/повторяющиеся вопросы, например:

fooobar.com/questions/140301/...

Ответ 2

Я потратил на это справедливое размышление, различные предложения там разбиты по-разному - они нарушают установку зависимостей, или они не работают в pip и т.д. Здесь мое решение:

в setup.py:

from setuptools import setup, find_packages
from setuptools.command.install import install
from distutils.command.install import install as _install

class install_(install):
    # inject your own code into this func as you see fit
    def run(self):
        ret = None
        if self.old_and_unmanageable or self.single_version_externally_managed:
            ret = _install.run(self)
        else:
            caller = sys._getframe(2)
            caller_module = caller.f_globals.get('__name__','')
            caller_name = caller.f_code.co_name

            if caller_module != 'distutils.dist' or caller_name!='run_commands':
                _install.run(self)
            else:
                self.do_egg_install()

        # This is just an example, a post-install hook
        # It a nice way to get at your installed module though
        import site
        site.addsitedir(self.install_lib)
        sys.path.insert(0, self.install_lib)
        from mymodule import install_hooks
        install_hooks.post_install()
        return ret

Затем в вашем вызове функции настройки передайте аргумент arg:

cmdclass={'install': install_}

Вы можете использовать ту же идею для сборки, в отличие от установки, написать себе декоратор, чтобы упростить его и т.д. Это было проверено с помощью pip и прямое вызов "python setup.py install".

НТН А