用python编写的带有一些C扩展的项目(不使用SWIG等)。我试图找出如何构建我的项目,以便:
目前的结构如建议的那样here:
Project\
docs\ # mainly documentation, right?
bin\ # empty
setup.py # setup for the project, as suggested in the above link
project\
__init__.py
module.py
tests\
bla_test.py
C\ # the package of C files
file.c
file.so
other_c_stuff.c
header.h
setup.py # setup to compile the C files and create .so files
build\ # contaisn a bunch of (hopefully) irrelevant stuf
它来自PyDev,但不是来自shell。理想的答案将解决以下问题:
tests
中的模块)。setup.py
个文件中完成的(我应该在这里发帖吗?)我试过relative imports - 他们因某些原因不能为我工作。 我看到了接受this问题的答案。他说 - 做任何事。但我无法让进口工作。我读了this回答,但不知道他拥有的所有东西(我没有)。接受的答案对我没有帮助,因为再次进口失败了。 This博客文章提供了很好的建议,但同样是进口!
答案 0 :(得分:1)
我不想详细说明一般答案,因为你已经把好的答案联系好了。
一些适合你的结构可能看起来像:
Project\
build\ # directory used by setup.py
docs\ # mainly documentation, right?
setup.py # setup for the project, as suggested in the above link
project\
__init__.py
module.py
c_package\
__init__.py
file.c
file.so
other_c_stuff.c
header.h
tests\
__init__.py
test_bla.py
所以在project
包及其子包中,你可以使用相对导入,如果你在地方构建C Extensions
python setup.py build_ext --inplace
或创建包含
的setup.cfg
[build_ext]
inplace=True
但仅用于开发而不释放它,因为安装将失败。
构建自动化是可能的,但除了C源已更改之外,我不知道除了直接调用setup.py
之外的任何其他内容。