f2py не импортирует должным образом, несмотря на успешную компиляцию - PullRequest
1 голос
/ 28 марта 2020

Я успешно компилирую свою подпрограмму Fortran с помощью f2py. Однако создается папка и файл pyd.

Если я не помещаю созданный pyd-файл в сгенерированную папку, я получаю эту ошибку

ImportError: DLL load failed: The specified module could not be found.

Если я помещаю сгенерированный .pyd-файл в сгенерированную папку , мой python скрипт запустится, и импорт, кажется, будет работать. Однако, если я запускаю print(energy_f2py.__doc__) None, это вывод, и когда я пытаюсь использовать подпрограмму, я получаю ошибку AttributeError: module 'energy_f2py' has no attribute 'potential_3'

potential_3 - это имя subroutine внутри energy_f2py.f90

Я также пытался сделать energy_f2py.f90 модулем, содержащим подпрограмму, без различий в результатах.

Это pyd-файл, который генерируется energy_f2py.cp36-win_amd64.pyd. Я использую командную строку в Pycharm (windows 10 64 бит) для компиляции файла Фортрана, используя

  1. f2py -c -m energy_f2py energy_f2py.f90

  2. python -m numpy.f2py -c -m energy_f2py energy_f2py.f90

То же самое происходит.

Мне кажется странным, что как файл pyd создается, так и папка, см. Изображение ниже enter image description here

Я застрял на этом этапе ... кажется, что это 95% пути к работе ...

Наконец, этот другой пост * У 1046 * было решение о том, чтобы называть модули Python и Fortran разными именами. Я попробовал это, и это тоже ничего не изменило.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Лучшее решение, которое я нашел, - это разделить мой жесткий диск и установить Linux. Я решил использовать Lubuntu, но вы можете использовать все, что угодно.

Все работает как надо на Linux.

0 голосов
/ 16 апреля 2020

Другой вариант - сделать его статичным c билдом с флагом -static. Это объединит все необходимое в один файл:

python -m numpy.f2py -c -m energy_f2py energy_f2py.f90 -static

После этого вы сможете использовать этот файл .pyd независимо от того, в какую папку вы его поместили.

...