将f2py与distutils混合使用
我有一个叫“trees”的Python包,其中有一个myscript.py文件,这个文件使用了一个Fortran的子程序。
通常,我会用下面的命令来编译这个Fortran模块:
f2py -c -m calctree calctree.f90
然后我可以这样做:
from trees import myscript
myscript.mysub()
这时候就会用到calctree.so这个文件。
如果我通过运行下面的命令,用distutils把所有东西打包:
python ./setup.py sdist
那么setup.py文件的内容是:
#! /usr/bin/env python
from distutils.core import setup
setup(name='trees',
version='0.1',
packages=['trees']
)
我在MANIFEST.in文件中指定了“include trees/calctree.f90”,这样我可以把.f90文件包含进来,但我不知道怎么让它在用户的电脑上用f2py编译,并把.so文件放到合适的位置。有人能帮忙吗?
谢谢!
1 个回答
1
你想使用numpy.distutils.core模块,它有自己的一套设置函数。你的setup.py文件应该像下面这样写(假设Fortran文件放在一个叫做trees的文件夹里),
import numpy.distutils.core
import setuptools
# setup fortran 90 extension
#---------------------------------------------------------------------------
ext1 = numpy.distutils.core.Extension(
name = 'calctree',
sources = ['trees/calc_tree.f90'],
)
# call setup
#--------------------------------------------------------------------------
numpy.distutils.core.setup(
name = 'trees',
version = '0.1',
packages = setuptools.find_packages(),
package_data = {'': ['*.f90']},
include_package_data = True,
ext_modules = [ext1],
)
这至少是一个开始。