我编写了一个 Python 模块,包括一个用 C 编写的子模块:模块本身被调用foo
,C 部分是foo._bar
. 结构如下:
src/
foo/__init__.py <- contains the public stuff
foo/_bar/bar.c <- the C extension
doc/ <- Sphinx configuration
conf.py
...
foo/__init__.py
导入_bar
以增强它,并且有用的东西暴露在foo
模块中。这在构建时工作正常,但显然不会以未编译的形式工作,因为_bar
在构建之前不存在。
我想使用 Sphinx 来记录项目,并在模块上使用autodoc扩展。foo
这意味着我需要先构建项目,然后才能构建文档。
由于我使用 distutils 构建,构建的模块最终会出现在一些可变命名的 dir 中build/lib.linux-ARCH-PYVERSION
——这意味着我不能将目录硬编码到 Sphinx'conf.py
中。
那么如何配置我的 distutilssetup.py
脚本以在构建的模块上运行 Sphinx 构建器?
为了完整起见,这里调用(“假”的东西是子类和setup
的自定义构建器):build
build_ext
setup(cmdclass = {
'fake': fake,
'build_ext_fake' : build_ext_fake
},
package_dir = {'': 'src'},
packages = ['foo'],
name = 'foo',
version = '0.1',
description = desc,
ext_modules = [module_real])