我有一个项目目录结构:


 myproject /
 setup.py
的myproject /
编辑/
 ....
公用事业/
 ...
 find_inf.f90



 项目中的所有文件都是python,除了我指出的一个fortran文件。现在,我可以使用 setuptools
来安装我的项目而没有fortran文件就好了,但要包含fortran文件我必须使用 numpy.distutils.core.Extension
。所以我有一个这样的设置文件:
来自setuptools import find_packages
来自numpy.distutils.core import Extension

 ext1 = Extension(name ='myproject.find_inf',
 sources = ['myproject / utilities / find_inf.f90'],
 extra_f90_compile_args = [' - fopenmp',],
 libraries = [ 'gomp'])

 if __name__ ==“__ main __”:
来自numpy.distutils.core import setup
 setup(name ='myproject',
 packages = find_packages(),
 package_data = {
 ......
},
 entry_points = {&# xA;'console_scripts':[....]
},

 ext_modules = [ext1]
)

&# xA;
 这将在 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
编辑\
 find_inf.pyc
 find_inf.so.dSYM /
 find_inf.py
 find_inf.so *
 __init__.py
 __init __。pyc



 所以我认为我应该可以从 myproject导入
编写 find_inf
代码>。但我不能!从myproject import find_inf 会产生导入错误。我做错了什么?
更新:


如果我有机会这个名字从 my project.find_inf
到 find_inf
的扩展名,然后安装将扩展名直接放在 myproject-2.0-py2.7-macosx-10.6-x86_64中。蛋代码>。如果那时我手动将的find_inf文件从那里移动到
myproject-2.0-py2.7-macosx-10.6-x86_64.egg / myproject
,那么我可以导入扩展名。我仍然无法理解这一点。我的setup.py中明显错误的是它没有将扩展放在正确的位置....
更新:&# xA;想出来。答案如下。

答案 0 :(得分:0)
好的,想通了。 name=
的{{1}}参数应为Extension
。
原因:所以问题是name=myproject.utilities.find_inf
没有知道名为myproject.find_inf
的包。设置的setup()
参数获取包的名称(作为列表),packages=
不在列表中,因为myproject下没有名为find_inf的目录(作为我的目录结构)问题显示)。 This answer为这个问题提供了重要的信息。为了将编译后的扩展放在适当的子包下,需要:
myproject.find_inf
文件应存在于这些包中,__init__.py
中的packages=
参数。 即。仅仅在调用setup()
时描述扩展层次结构是不够的。