无法从f2py编译功能使用Fortran代码

问题描述 投票:1回答:1

我有以下的Fortran代码:

    !routines.f90
    module mymodule
       contains

         function add(a, b)
             real(8), intent(in):: a
             real(8), intent(in):: b
             real(8) :: add
             add = a + b
         end function
    end module

而不是使用命令:python -m numpy.f2py -m routines -c routines.f90,我想从一个Python脚本内编译如下:

#main.py
import numpy as np
import numpy.f2py as f2py

with open(r'routines.f90', 'r') as f:
     source = f.read()

 f2py.compile(source, modulename='routines')

 print('OK')

但是,当我试图执行这个脚本:python main.py我得到以下错误:

Traceback (most recent call last):
  File "main.py", line 7, in <module>
    f2py.compile(source, modulename='routines')
  File "/home/user1/anaconda3/lib/python3.6/site-packages/numpy/f2py/__init__.py", line 59, in compile
    f.write(source)
  File "/home/user1/anaconda3/lib/python3.6/tempfile.py", line 485, in func_wrapper
    return func(*args, **kwargs)
TypeError: a bytes-like object is required, not 'str'

你能告诉我是什么问题?

python fortran f2py
1个回答
3
投票

open(r'routines.f90', 'r')打开你的文件进行读取的文本(又名str),但是,很显然,f2py.compile要求其第一个参数是类型bytes的。为了满足的是,以二进制方式打开文件:

open(r'routines.f90', 'rb')

(此外,还有没有必要在r第一r'routines...',你可以做'routines.f90',虽然它并没有太大变化)。

© www.soinside.com 2019 - 2024. All rights reserved.