使用 f2py 编译基本的 fortran 模块

compiling basic fortran module with f2py

我正在尝试使用 F2py,但在涉及“已弃用的 numpy”的编译时收到一些错误消息或警告。我不确定如何解决这个问题。我正在使用 python 2.7.17 和 fortran90。

我写编译
f2py -c f2py_F90.f90 -m fortran

注意,编译时: f2py -c f2py_F90.f90 -m fortran \
也没有解决问题。

下面是基本的 fortran 和 python 代码,它们表明了我遇到的问题。这个例子是最小的、完整的和可验证的。我怎样才能解决这个问题并成功地让 python 执行我传递给它的 fortran 模块?

我收到的消息是

警告“使用已弃用的 NumPy API”

预期的输出应该是 = [2,1,3] 但我却收到了上述警告。

!fortran code
module fmodule
   implicit none
contains
   subroutine fast_reverse(a,n)

   integer, intent(in) :: n
   real, intent(inout) :: a(:)

   a(1:n) = a(n:1:-1)

   end subroutine fast_reverse
end module fmodule

#python code
import fortran
import numpy as np

a = np.array([1,2,3],np.float32)

fortran.fmodule.fast_reverse(a,2)

a #the output should give a = [2,1,3] 
  1. 忽略#warning "Using deprecated NumPy API, disable it with ...,参见Cython Numpy warning about NPY_NO_DEPRECATED_API when using MemoryView and Cython docs
  2. 将最后一行 a #the output should give a = [2,1,3] 更改为 print(a) #the output should give a = [2,1,3] 以将 a 打印为 stdout

例如:

$ python2.7 -m numpy.f2py -c f2py_F90.f90 -m fortran
running build
...
      /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h :it17 :with2 :"          "#define 
  NPY_NO_DEPRECATED_APIwarning : NPY_1_7_API_VERSION" [-W#warnings]

  "Using deprecated NumPy API, disable it with "          "#define
  NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
#warning "Using deprecated NumPy API, disable it with " \
...

$ cat test_f2py_F90.py 
#python code
import fortran
import numpy as np

a = np.array([1,2,3],np.float32)

fortran.fmodule.fast_reverse(a,2)

print(a) #the output should give a = [2,1,3]



$ python2.7 test_f2py_F90.py 
[2. 1. 3.]