#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. Спасибо. Я попробовал это сделать, но результат тот же.