gpt4 book ai didi

python - 将 Sphinx 与 distutils 构建的 C 扩展一起使用

转载 作者:太空狗 更新时间:2023-10-29 21:44:38 25 4
gpt4 key购买 nike

我写了一个 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 构建,构建的模块最终位于一些可变命名的目录 build/lib.linux-ARCH-PYVERSION — 这意味着我不能将目录硬编码到Sphinx' conf.py.

那么如何配置我的 distutils setup.py 脚本以在构建的模块上运行 Sphinx 构建器?

为了完整起见,这里是对 setup 的调用(“假”东西是 buildbuild_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])

最佳答案

既然 distutils 有办法确定变量构建路径,为什么不直接使用它呢?

import distutils.command.build
from distutils.dist import Distribution

b = distutils.command.build.build(Distribution())
b.initialize_options()
b.finalize_options()

print b.build_temp

# If you're building a library, you might need:
print b.build_lib

# Other values of interest are:
b.build_purelib
b.build_platlib
b.build_scripts
b.build_base

即使认为 distutils 文档很少,here you'll find one-liners关于那里有哪些类型的构建。

关于python - 将 Sphinx 与 distutils 构建的 C 扩展一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4687608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com