Могу ли я использовать альтернативную систему сборки для моего модуля расширения Python (написанного на C++)?

Хотя distutils работает нормально, мне это не совсем удобно, и у меня также есть проблемы с производительностью без видимого решения. Можно ли интегрировать Premake или cmake в мой скрипт setup.py, чтобы python setup.py build вызывает их, а затем размещает вывод, где install ожидает это?

1 ответ

Решение

Я нашел способ, это не красиво, но это работает.

Вот сумма моих setup.py файл скрипта - он должен быть достаточно понятным:

import shutil
import os

from distutils.core import setup
from distutils.core import Extension

from distutils.command.build_ext import build_ext
from distutils.command.install_lib import install_lib

library = None

def generate_lib():
    """
        Build library and copy it to a temp folder.
        :returns: Location of the generated library is returned.
    """
    raise NotImplementedError


class MyInstall(install_lib):
    def install(self):
        global library
        shutil.move(library, self.install_dir)
        return [os.path.join(self.install_dir, library.split(os.sep)[-1])]


class MyBuildExtension(build_ext):
    def run(self):
        global library
        library = create_lib();

module = Extension('name',
                   sources=[])

setup(
    name='...',
    version='...',
    ext_modules=[module],
    description='...',
    long_description='...',
    author='...',
    author_email='...',
    url='...',
    keywords='...',
    license='...',
    platforms=[],
    classifiers=[],
    cmdclass={
        'build_ext': MyBuildExtension,
        'install_lib': MyInstall
    },
)

Я надеюсь, что это помогает.

Другие вопросы по тегам