Кастомізація setuptools в Python

Зіткнувся з необхідністю реалізації власної логіки встановлення пакету. Пошукавши занйшов рішення, яке ґрунтується на перевизначенні метода інсталяції:

    setup(
          ...,
          cmdclass={
                   'install': .....,
          }
)
Як видно зі зразка коду власний встановник визначається в секції cmdclass - install і приймає клас (об'єкт класу). Ось повний зразок:
def get_fonts_loader():
    def run(self):
        install.do_egg_install(self)
        package_dir = os.getcwd()
        os.chdir("src/captcha/")
        subprocess.call(["git", "clone",
                         "https://github.com/epadyachok/fonts.git"])
        os.chdir(package_dir)
    return type('CustomInstaller', (install, object,), {'run' : run})

setup(
    name='captcha',
    version='4.0',
    packages=['captcha'],
    package_dir={'captcha':'src/captcha'},
    install_requires =[
        'Pillow',
        'pyaml',
    ],
    long_description=open(join(dirname(__file__), 'README.rst')).read(),
    cmdclass={
        'install' : get_fonts_loader(),
    },
    )
Важливим моментом тут є використання метода install.do_egg_install(). За звичай радиться, використовувати install.run(), проте він не встановлює install_requires.
Більше тут

Comments

Popular posts from this blog

Install Kubeflow locally

RabbitMQ and OpenShift