2013-01-22 57 views
3

我有一个python包“trees”,其中包含使用fortran子例程的myscript.py文件。使用distutils混合f2py

通常我编译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'] 
    ) 

,并指定“包括树/ calctree.f90”在MANIFEST.in文件,我可以包括.F90文件,但我不知道该怎么在用户的计算机上用f2py进行编译,并将.so文件放在适当的位置。任何人都可以帮忙吗?

谢谢!

+0

不知道内置解决方案,但是您可以在调用'setup'之前在模块中自己运行命令,然后在编译调用中包含编译后的文件。 – Voo

回答

1

你想使用numpy.distutils.core模块,它有自己的设置功能。 你setup.py应该是这个样子(假设Fortran文件都在目录中名为树),

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], 

) 

这至少应该是一个开始。