我已设法使用f2py手动包装一组Fortran 90源。为此,我生成了签名文件,如:http://docs.scipy.org/doc/numpy/user/c-info.python-as-glue.html中所述,我可以获得一个.so,我可以从一些Python接口文件调用。
现在我想从它创建一个自动构建Fortran扩展的包。包含Fortran源和签名文件的文件夹中唯一添加的内容现在是一个setup.py文件,其中包含以下内容:
from numpy.distutils.core import setup, Extension
from numpy.distutils.misc_util import Configuration
DISTNAME = 'greengard'
def configuration(parent_package='',top_path=None):
config = Configuration(DISTNAME, parent_package, top_path)
# the Fortran sources
f90_sources = ['_greengard.pyf'
'nufft1df90.f',
'nufft2df90.f',
'nufft3df90.f',
'next235.f',
'dfftpack.f',
]
config.add_extension('_greengard', f90_sources)
return config
if __name__ == "__main__":
setup(configuration=configuration)
然后激活了virtualenv并尝试安装包
python setup.py install
但最终得到以下错误:
creating build/temp.linux-x86_64-2.7/build/src.linux-x86_64-2.7/greengard
compile options: '-Ibuild/src.linux-x86_64-2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c'
gcc: build/src.linux-x86_64-2.7/greengard/_greengardmodule.c
gcc: build/src.linux-x86_64-2.7/fortranobject.c
compiling Fortran sources
Fortran f77 compiler: /usr/bin/gfortran -Wall -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops
Fortran f90 compiler: /usr/bin/gfortran -Wall -fno-second-underscore -fPIC -O3 -funroll-loops
Fortran fix compiler: /usr/bin/gfortran -Wall -ffixed-form -fno-second-underscore -Wall -fno-second-underscore -fPIC -O3 -funroll-loops
compile options: '-Ibuild/src.linux-x86_64-2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c'
error: _greengard.pyfnufft1df90.f: No such file or directory
启动setup.py后的第一行:
non-existing path in '': '_greengard.pyfnufft1df90.f'
但是设置过程继续进行并且Fortran扩展似乎已经编译(显示的行看起来就像我通过手动运行f2py得到的那样)。
我试图从在线提供的示例中找到解决方案,但大多数都有点太简单而无法提供帮助。拥有Python包装经验的人可以帮我解决这个问题吗?
答案 0 :(得分:0)
尝试了一下后,我意识到我没有正确清理调用安装脚本时创建的中间“Build”目录。后者必须保留我先前的不成功尝试之一,其中共享扩展的路径设置错误。
我重复了一个空白的例子,并且安装到我的virtualenv的网站包中已经成功。