我有一个项目目录结构:
myproject/
setup.py
myproject/
editors/
....
utilities/
...
find_inf.f90
项目中的所有文件都是python文件,除了我已经指出的一个fortran文件。现在,我可以使用setuptools
来安装我的项目而不用fortran文件,但是要包含fortran文件,我必须使用numpy.distutils.core.Extension
。所以我有这样一个安装文件:
这将在site-packages
目录下创建并安装myproject-2.0-py2.7-macosx-10.6-x86_64.egg
,目录结构如下:
myproject-2.0-py2.7-macosx-10.6-x86_64.egg
myproject
editors\
find_inf.pyc
find_inf.so.dSYM/
find_inf.py
find_inf.so*
__init__.py
__init__.pyc
所以在我看来,我应该能够从myproject
导入{from myproject import find_inf
会产生导入错误。我做错什么了?在
更新:
如果我碰巧将扩展名从my project.find_inf
改为find_inf
,那么安装程序会将扩展直接放入myproject-2.0-py2.7-macosx-10.6-x86_64.egg
。如果我手动将find\u inf文件从那里移动到myproject-2.0-py2.7-macosx-10.6-x86_64.egg/myproject
,那么我就可以导入扩展名了。我还是搞不懂。我的设置.py它没有把分机放在正确的位置。。。。在
更新: 明白了。请在下面回答。在
好吧,想清楚了。
Extension
的name=
参数应该是name=myproject.utilities.find_inf
。在原因:所以问题是没有}不在列表中,因为myproject下没有名为find_inf的目录(如我问题中的目录结构所示)。This answer对这个问题有重要的启示。为了将编译后的扩展放在适当的子包下,需要:
myproject.find_inf
知道的名为myproject.find_inf
的包。setup的packages=
参数获取包的名称(作为列表),而{__init__.py
文件应该存在于这些包中,并且setup()
中的packages=
参数。在也就是说,仅仅在调用
Extension()
中描述扩展层次结构是不够的。在相关问题 更多 >
编程相关推荐