包含C扩展模块的Python项目目录结构
我们组织里有很多项目是用Python和C混合编写的。现在我们想要统一一下项目的目录结构,想出一个方便的方案。其中一个争论点就是,C扩展模块应该放在哪里。
我们在考虑几个选项(相对于项目根目录):
./src/package/subpackage/module.c
或者把它们放在包树中的Python模块旁边:
./package/subpackage/module.c
或者放在子包的src
目录里:
./package/subpackage/src/module.c
把它们放在包目录外的一个原因是,这样可以避免杂乱,特别是当还有其他的.c和.h文件时,这些文件本身不是模块,但仍然需要编译。而在“集成”方案中,如果有多个模块使用同样的头文件和文件,该怎么处理呢?把它们放在一个公共的顶层目录里吗?
我很想知道其他人是怎么做的,或者有没有什么已经建立的最佳实践。
1 个回答
1
我觉得Python标准库的结构是个不错的例子:在trunk目录下,这基本上是SVN仓库的根目录(包括分支等),Modules
文件夹里有很多.c
和.h
文件,而Lib
文件夹里则有很多.py
文件。
在我自己的项目中,我也喜欢用类似的方式来划分文件(其实如果我有Cython、Pyrex或者SWIG等文件,我通常还会再创建其他文件夹来进一步分类),不过我用的文件夹名字会不同(我承认我没有一个统一的规则来命名这些文件夹,也没听说过有什么好的命名指南)。