Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中打包遗留Fortran。可以使用setuptools和numpy.distutils吗?_Python_Numpy_Fortran_Setuptools_F2py - Fatal编程技术网

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

在Python中打包遗留Fortran。可以使用setuptools和numpy.distutils吗?,python,numpy,fortran,setuptools,f2py,Python,Numpy,Fortran,Setuptools,F2py,我正在尝试为我所在领域的一些流行Fortran代码制作python包分发版。我希望它使用一个setup.py文件的最标准方法。相关问题有助于学习 使用这种方法时,我注意到在混合setuptools和numpy.distutils时出现了一些令人困惑的行为。把这两者混在一起是不好的做法吗?截至2015年,似乎最好尽可能多地使用setuptools 但是,我想以一种与numpy兼容的方式构建Fortran扩展。因此我想从numpy.distutils导入以获得扩展和设置 我使用以下基本方法: fro

我正在尝试为我所在领域的一些流行Fortran代码制作python包分发版。我希望它使用一个
setup.py
文件的最标准方法。相关问题有助于学习

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

但是,我想以一种与
numpy兼容的方式构建
Fortran
扩展。
因此我想从
numpy.distutils
导入以获得
扩展
设置

我使用以下基本方法:

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
    numpy.distribute
    通常是一种好的做法吗
  • 我进口它们的顺序重要吗?我是否应该始终首先导入
    setuptools
  • 是否有官方最新的教程,用于将扩展打包到
    numpy
    ?甚至可能是一个有一些Fortran扩展的讨论

  • 一些链接

    这似乎有效,但我有问题

  • 将setuptools和numpy.distribute混合使用通常是一种好的做法吗
  • 我进口它们的顺序重要吗?我应该总是先导入setuptools吗
  • 是否有一个官方的最新教程,用于将扩展打包到numpy?甚至可能是一个有一些Fortran扩展的讨论
  • 您不需要再使用numpy.distribute了

  • ^^没必要

  • 特别是对于用numpy包装fortran代码,有一种流行的方法。然而,我个人认为必要的代码注释是多余的,因为好的fortran代码包含所有必要的信息

  • (警告:下面是个人项目插头)


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

    我不是编写Fortran代码的专家,但我对Cython很有经验。Scipy 2015中有一个关于成功包装Fortran代码的非常好的部分-我建议您看看!你所说的标准Python是什么意思<如果您希望能够将任务委托给本机代码并利用线程/多进程,则code>nogil非常重要。您的MPI示例是发布GIL的最佳时机@GIL与MPI有什么共同之处?MPI有单独的进程,所以锁不应该起作用。不过线程是不同的。与f2py相比,Cython允许您在Fortran代码中使用。因为f2py主要是为Fortran77代码构建的,所以它缺少很多Fortran90+功能,例如动态内存分配。有了Cython,您就有了更大的灵活性,因为您的Fortran和Cython代码可以使用iso_c_绑定彼此说话(几乎是本地的)。在前面的一些评论之后,我想为您的考虑提供另外两个选项。如果使用“旧”Fortran,则可以使用
    ctypes
    直接访问Fortran函数(只需注意函数名,根据编译器的不同,函数名后面会有下划线)。最近,我已经成为一个迷,它允许你从C++中写出整个Python模块,它的优点是古老的FORTRAN代码获得了一个现代的前端。个人项目插件不是问题,但是这个答案是。请您参考您在上述1,2,3中回答的问题,以便实际阅读此答案?