我有一个 Python 项目,其中包含用 C 编写的多个扩展模块,它们与第三方库通信。但是,根据用户的环境和选项,不应构建某些模块,并且应启用/禁用某些编译器标志。问题是我必须在调用 setup() 之前构建扩展模块列表,理想情况下我想使用 distutils.Command 子类来处理用户选项。现在我有几个选择:
需要在构建模块之前运行“python setup.py configure”命令,将信息存储在 pickle 文件中,并在脚本下次运行时使用它来生成扩展列表。这就是我的项目目前的工作方式,这似乎很愚蠢。
手动从 sys.argv 中抓取选项并使用它们来构建列表。这不是一个长期的解决方案,因为我最终会想在构建之前运行一些脚本来检查设置。
从 distutils 子类 build_ext,在 run() 方法的开头进行我的配置(可能也使用通过 (2) 发送的选项)并在构建之前直接修改 self.distribution.ext_modules。但是,我担心这可能会使 setuptools 混淆,因为它可能假定在调用 setup() 时扩展模块列表是固定的。这也意味着当使用 build_ext 以外的命令调用 setup() 时,扩展模块列表为空。
有没有首选的方法来做到这一点?