我有一个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()时,扩展模块列表为空。