F2PY: компилятор gfortran не найден и отсутствуют библиотеки DLL

#python #numpy #fortran #gfortran #f2py

Вопрос:

Мне нужно использовать скрипт Fortran77 из Python, поэтому я пытаюсь использовать пакет F2PY. У меня нет знаний Фортрана, и в моей Windows 10 не было компилятора Фортрана, поэтому я установил gfortran, следуя этому руководству. Я думаю, что установка сработала, потому что, если я запущу gfortran команду из 64-разрядной версии MSYS2 MinGW, я получу

 gfortran: fatal error: no input files
compilation terminated.
 

Затем я попытался запустить пример из документации F2PY по этой ссылке, но получил эту ошибку:

 error: extension 'fib1' has Fortran sources but no Fortran compiler found
 

Я предполагаю, что F2PY не видит компилятор gfortran, поэтому я установил переменную среды в соответствии с четвертым шагом этого руководства: я создал новую переменную среды (пользовательскую переменную, а не системную), которая называется C_INCLUDE_PATH и имеет значение C:msys64usrbingfortraninclude . Если я попытаюсь повторить пример, я получу ту же ошибку.

Что я упускаю? Должен ли я использовать системную переменную вместо пользовательской переменной? Кроме того, значение переменной выглядит немного странно, потому что единственный экземпляр gfortran , который я нашел на своем компьютере, — это файл, а не каталог… Заранее спасибо!


Обновление: Я смог решить эту проблему, добавив C:msys64usrbin в свой путь! Теперь я могу успешно скомпилировать модуль Fortran, но когда я пытаюсь импортировать модуль расширения в Python, я получаю

 ImportError: DLL load failed while importing fib1: Couldn't find the specified module.
 

Я также включил C:msys64usrlib в свой путь, но ошибка сохраняется. Есть какие-нибудь идеи?


Новое обновление: Я наконец-то смог решить проблему с отсутствующей ошибкой DLL! Для меня, когда я запускаю команду для создания модуля расширения ( python -m numpy.f2py -c fib1.f -m fib1 ), в моем текущем каталоге создаются две вещи: fib1.cp38-win_amd64.pyd файл, который, как я думаю, является самим модулем расширения, и fib1 каталог, содержащий .libs каталог. Этот последний каталог содержит следующий файл:

 libfib1.OPD3BD7YADI2T777PBURWLTYIK5TRWK2.gfortran-win_amd64.dll
 

Я только что скопировал этот файл из .libs каталога в текущий каталог (тот же, где у меня есть файл .pyd), и теперь модуль exension работает нормально!

Я надеюсь, что это может помочь 🙂

Комментарии:

1. Вы numpy сначала импортировали?

2. Да, я сделал это; в любом случае PyCharm сигнализирует, что импорт numpy не нужен, если я просто попытаюсь распечатать документацию по модулю расширения, как я делаю сейчас…

3. Хм, ХОРОШО. Я протестировал пример, и он сработал правильно, хотя и в Linux. Попробуйте запустить из терминала, а не из PyCharm.

4. Спасибо. Я попробовал это сделать, но результат тот же.