我正在尝试为我的领域中一些流行的 Fortran 代码制作一个 python 包发行版。我希望它使用最标准的方法setup.py
文件。相关问题对学习有帮助如何包装 Fortran 扩展 https://stackoverflow.com/questions/7932028/setup-py-for-packages-that-depend-on-both-cython-and-f2py?rq=1.
使用这种方法时,我注意到混合时出现一些令人困惑的行为setuptools
and numpy.distutils
。将两者混合在一起是不好的做法吗?截至 2015 年,似乎最好使用setuptools
越多越好。
但是,我想建立Fortran
以兼容的方式扩展numpy.
所以我想从numpy.distutils
to get Extension
and setup
.
我正在使用以下基本方法:
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
and numpy.distribute
?
- 我导入它们的顺序重要吗?我应该总是导入吗
setuptools
first?
- 是否有关于打包扩展的官方最新教程
numpy
?甚至可能有一些关于 Fortran 扩展的讨论?
一些链接
https://www.youtube.com/watch?v=R4yB-8tB0J0 https://www.youtube.com/watch?v=R4yB-8tB0J0
http://www.fortran90.org/src/best-practices.html#interface-with-python http://www.fortran90.org/src/best-practices.html#interfacing-with-python
这似乎有效,但我有疑问。
- 混合使用 setuptools 和 numpy.distribute 通常是一个好的做法吗?
- 我导入它们的顺序重要吗?我应该首先导入 setuptools 吗?
- 是否有关于将扩展打包到 numpy 的官方最新教程?甚至可能有一些关于 Fortran 扩展的讨论?
您应该不再需要使用 numpy.distribute 了。
^^ 没有必要
特别是对于用 numpy 包装 fortran 代码,有流行的f2py https://docs.scipy.org/doc/numpy-dev/f2py/。然而,我个人认为必要的代码注释是多余的,因为好的 Fortran 代码包含所有必要的信息。
(警告个人项目插件如下)
最近发布的是清洁工fmodpy https://github.com/tchlux/fmodpy,它会在一个易于理解且干净的界面中自动生成所有必要的包装器代码。它支持 Fortran90 之前的版本,但最适合 Fortran90 及更高版本。它可以用来生成一个干净的发行版以及代码的 python 接口(假设用户安装了 gfortran)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)