在Python中打包遗留Fortran。是否可以使用setuptools和numpy.distutils?

时间:2015-07-13 16:14:11

标签: python numpy fortran setuptools f2py

我正在尝试为我的领域中的一些流行的Fortran代码进行python包分发。我希望它使用setup.py文件的最标准方法。相关的qustion有助于学习how to wrap Fortran extensions

使用这种方法时,我注意到在混合setuptoolsnumpy.distutils时出现了一些令人困惑的行为。将两者混合是不好的做法吗?截至2015年,似乎最好尽可能使用setuptools

但是,我希望以与Fortran兼容的方式构建numpy.个扩展名。所以我想从numpy.distutils导入到Extension和{{ 1}}。

我使用以下基本方法:

setup

这似乎有效,但我有疑问。

  1. 混合from setuptools.command.develop import develop from numpy.distutils.core import Extension, setup ext_modules=[Extension("my_package.fortran_mod", sources=['src/fortran_mod.f'])] class MyDevelop(develop): def run(self): my_script() develop.run(self) setup( ... ext_modules=ext_modules, cmdclass={'develop':MyDevelop}) setuptools
  2. 一般是不错的做法
  3. 我导入的订单是否重要?我应该先导入numpy.distribute吗?
  4. 是否有关于setuptools包装扩展的官方最新教程?也许甚至有一些讨论Fortran扩展?
  5. 一些链接

    https://www.youtube.com/watch?v=R4yB-8tB0J0

    http://www.fortran90.org/src/best-practices.html#interfacing-with-python

1 个答案:

答案 0 :(得分:2)

  

这似乎有效,但我有疑问。

     
      
  1. 混合setuptools和numpy.distribute是一般的好习惯吗?
  2.   
  3. 我导入的订单是否重要?我应该先导入setuptools吗?
  4.   
  5. 是否有关于numpy包装扩展的官方最新教程?也许甚至有一些讨论Fortran扩展?
  6.   
  1. 您不再需要使用numpy.distribute。

  2. ^^没必要

  3. 特别是对于使用numpy包装fortran代码,有流行的f2py。但是我个人觉得必要的代码注释是多余的,因为好的fortran代码包含所有必要的信息。

  4. 警告个人项目插件

    最近发布的是清除器fmodpy,它可以在一个易于理解的干净界面中自动生成所有必需的包装器代码。它支持Fortran90之前的版本,但最适合Fortran90及更高版本。它可以用来生成一个干净的分布以及代码的python接口(假设用户已经安装了gfortran)。