使用distutils/setuptools配置扩展模块

6 python distutils setuptools

我有一个Python项目,其中包含用C编写的多个扩展模块,它们与第三方库进行通信.但是,根据用户的环境和选项,不应构建某些模块,并且应启用/禁用某些编译器标志.问题是我必须在调用setup()之前构建扩展模块列表,理想情况下我想使用distutils.Command子类来处理用户选项.现在我有几个选择:

  1. 在构建模块之前需要运行"python setup.py configure"命令,将信息存储在pickle文件中,并在下次运行脚本时使用它来生成扩展列表.这就是我的项目目前的工作方式,这看起来很愚蠢.

  2. 手动从sys.argv中删除选项并使用它们来构建列表.这不是一个长期的解决方案,因为我最终会想要在构建之前运行一些脚本来检查设置.

  3. 来自distutils的子类build_ext,在run()方法的开头做我的配置(可能还使用通过(2)发送的选项)并在构建之前直接修改self.distribution.ext_modules.但是,我担心这可能会混淆setuptools,因为它可能会在调用setup()时修复扩展模块列表.这也意味着当使用除build_ext之外的命令调用setup()时,扩展模块列表为空.

有没有一种首选的方法呢?

And*_*lke 0

我自己在更改 distutils 方面的经验很薄弱且不稳定,所以我只能提供一些建议。看看 numpy. 它有一个完整的子模块(numpy.distutils),其中包含使用(或解决)distutils 的方法。否则,请询问 distutils 邮件列表。