Невозможно использовать код Fortran из функции компиляции f2py - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть следующий код на Фортране:

    !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'

Не могли бы вы сказать мне, в чем проблема?

1 Ответ

0 голосов
/ 03 февраля 2019

open(r'routines.f90', 'r') открывает ваш файл для чтения text (он же str), но, очевидно, f2py.compile требует, чтобы его первый аргумент был типа bytes.Для этого откройте ваш файл в двоичном режиме:

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

(Кроме того, нет необходимости в первом r в r'routines...', вы можете просто сделать 'routines.f90', хотя это не таксильно изменится).

...