det*_*tly 7 python distutils python-sphinx
我编写了一个包含用C语言编写的子模块的Python模块:模块本身被调用foo而C部分被调用foo._bar.结构如下:
src/
foo/__init__.py <- contains the public stuff
foo/_bar/bar.c <- the C extension
doc/ <- Sphinx configuration
conf.py
...
Run Code Online (Sandbox Code Playgroud)
foo/__init__.py导入_bar以增加它,并在foo模块中公开有用的东西.它在构建时工作正常,但显然不能以未编译的形式工作,因为_bar在构建之前不存在.
我想使用Sphinx来记录项目,并在模块上使用autodoc扩展foo.这意味着我需要在构建文档之前构建项目.
由于我使用distutils构建,所以构建的模块最终会出现在一些名为dir的变量中build/lib.linux-ARCH-PYVERSION- 这意味着我不能仅仅将目录硬编码为Sphinx conf.py.
那么如何配置我的distutils setup.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])
Run Code Online (Sandbox Code Playgroud)
由于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
Run Code Online (Sandbox Code Playgroud)
甚至认为distutils文档很稀疏,在这里你会找到关于什么类型的构建的单行.
| 归档时间: |
|
| 查看次数: |
896 次 |
| 最近记录: |