我可以为我的Python扩展模块(用c++编写)使用替代构建系统吗?



虽然distutils工作得很好,但我对它并不完全满意,而且我还遇到了性能问题,没有明显的解决方案。是否有可能在我的setup.py脚本中集成Premake或cmake,以便python setup.py build调用它们,然后将输出放在安装期望的地方?

我想到了一个办法,虽然不好看,但是很有效。

这是我的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 build_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 = build_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
    },
)

最新更新