Могу ли я использовать альтернативную систему сборки для моего модуля расширения 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
},
)
Я надеюсь, что это помогает.