Ошибка при компиляции кода Fortran в Python 3.5.5 (Jupyter) на W10-64bit - PullRequest
2 голосов
/ 10 ноября 2019

Невозможно скомпилировать код Fortran на W10 64 с помощью f2py, хотя пробовал несколькими способами

Среда:

  • Windows 10, 64-битная
  • mingw-64bit установлена ​​
  • Python 3.5.5 :: Anaconda custom (64-bit)

В путь добавлен mingw \ bin, также C_INCLUDE_PATH = c:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\include

В блокноте Jupyter я добавил2 кодовых блока:

    %%writefile add.f90
C
      SUBROUTINE ZADD(A,B,C,N)
C
      DOUBLE COMPLEX A(*)
      DOUBLE COMPLEX B(*)
      DOUBLE COMPLEX C(*)
      INTEGER N
      DO 20 J = 1, N
         C(J) = A(J)+B(J)
 20   CONTINUE
      END

!python "c:\Users\Laszlo\Anaconda3\Scripts\f2py.py" -m add add.f90 -c

Ошибка:

запуск сборки
запуск config_cc
унификация config_cc, config, build_clib, build_ext, команды сборки - параметры компилятора
запуск config_fc
unifing config_fc, config, build_clib, build_ext, команды сборки --fcompilerпараметры
запуск build_src
build_src
расширение здания "добавить" источники
f2py параметры: []
f2py:> C: \ Users \ Laszlo \ AppData \ Local \ Temp \ tmp5uof322x \ src. win-amd64-3.5 \ addmodule.c
создание C: \ Users \ Laszlo \ AppData \ Local \ Temp \ tmp5uof322x \ src.win-amd64-3.5
Чтение кодов Фортрана ...
Чтение файла 'add.f90 '(формат: исправить)
Постобработка ...
Блок: добавить
Блок: zadd
Постобработка (этап 2) ...
Сборка модулей .. .
Сборка модуля "add" ...
Построение функции-обертки "zadd" ...
getarrdims: warning: принятый массив форм с использованием 0 вместо ''
getarrdims: warning: предполагается массив формы, используя 0 вместо '
'
getarrdims: предупреждение: предполагается массив формы, используя 0 вместо '*'
zadd (a, b, c, n)
Написал модуль C / API "добавить" в файл "C: \ Users \ Laszlo \ AppData \ Local \ Temp \ tmp5uof322x \ src.win-amd64-3.5 \ addmodule.c"
добавление 'C: \ Users \ Laszlo \ AppData \ Local \ Temp \ tmp5uof322x \ src.win-amd64-3.5 \ fortranobject.c' к источникам.
добавление 'C: \ Users \ Laszlo \ AppData \Локальный \ Temp \ tmp5uof322x \ src.win-amd64-3.5 'для include_dirs.
копирование C: \ Users \ Laszlo \ Anaconda3 \ lib \ site-packages \ numpy \ f2py \ src \ fortranobject.c -> C: \Users \ Laszlo \ AppData \ Local \ Temp \ tmp5uof322x \ src.win-amd64-3.5
копирование C: \ Users \ Laszlo \ Anaconda3 \ lib \ site-packages \ numpy \ f2py \ src \ fortranobject.h -> C: \ Users \ Laszlo \ AppData \ Local \ Temp \ tmp5uof322x \ src.win-amd64-3.5
build_src: сборка файлов конфигурации npy-pkg
запуск build_ext
Поиск python35.dll

Traceback (последний вызов был последним):
Файл "c: \ Users \ Laszlo \ Anaconda3 \ Scripts \ f2py.py", строка 28, в
main ()
Файл "C: \ Users \Laszlo \ Anaconda3 \ lib \ site-packages \ numpy \ f2py \ f2py2e.py ", строка 648, в основном
run_compile ()
Файл "C: \ Users \ Laszlo \ Anaconda3 \ lib \ site-packages \ numpy \ f2py \ f2py2e.py", строка 633, в run_compile
setup (ext_modules = [ext])
Файл "C: \Users \ Laszlo \ Anaconda3 \ lib \ site-packages \ numpy \ distutils \ core.py ", строка 166, в настройке
вернуть old_setup (** new_attr)
Файл" C: \ Users \ Laszlo \ Anaconda3 \ "lib \ distutils \ core.py ", строка 148, в настройке
dist.run_commands ()
Файл" C: \ Users \ Laszlo \ Anaconda3 \ lib \ distutils \ dist.py ", строка 955, в run_commands
self.run_command (cmd)
Файл "C: \ Users \ Laszlo \ Anaconda3 \ lib \ distutils \ dist.py", строка 974, в run_command
cmd_obj.run ()
Файл "C: \ Users \ Laszlo \ Anaconda3 \ lib \ site-packages \ numpy \ distutils \ command \ build.py ", строка 47, в прогоне
old_build.run (self)
Файл" C: \ Users \Laszlo \ Anaconda3 \ lib \ distutils \ command \ build.py ", строка 135, в прогоне
self.run_command (cmd_name)
Файл" C: \ Users \ Laszlo \ Anaconda3 \ lib \ distutils \ cmd.py", строка 313, в run_command
self.distribution.run_command (команда)
Файл" C: \ Users "\ Laszlo \ Anaconda3 \ lib \ distutils \ dist.py ", строка 974, в run_command
cmd_obj.run ()
Файл" C: \ Users \ Laszlo \ Anaconda3 \ lib \ site-packages \ numpy \ distutils "\ command \ build_ext.py ", строка 117, в прогоне
force = self.force)
Файл" C: \ Users \ Laszlo \ Anaconda3 \ lib \ site-packages \ numpy \ distutils \ ccompiler.py ", строка 596, в new_compiler
compiler = klass (нет, dry_run, force)
Файл "C: \ Users \ Laszlo \ Anaconda3 \ lib \ site-packages \ numpy \ distutils \ mingw32ccompiler.py", строка 96, в init
msvcr_success = build_msvcr_library ()
Файл "C: \ Users \ Laszlo \ Anaconda3 \ lib \ site-packages \ numpy \ distutils \ mingw32ccompiler.py", строка 329, вbuild_msvcr_library
если int (msvcr_name.lstrip ('msvcr'))) <80: <br>AttributeError: у объекта 'NoneType' нет атрибута 'lstrip'

Если я добавил --fcompiler=gfortran У меня Unknown vendor: "gfortran" ошибка.

Пробовал и так:

import numpy.f2py as f2py
source="""
subroutine foo
  print*, "Hello world!"
end subroutine
"""
f2py.compile(source, extension = 'f90', modulename='hello', extra_args = '--fcompiler=g95')

Я добавил несколько дополнительных команд печати в f2py__init__.py и также изменил это:

#status, output = exec_command(c)
status = os.system(c)

в противном случае он удалил весь обратный слеш из исполняемого файла (проблема с distutils).

C: \ Users \ Laszlo \ AppData \ Local \ Temp \ tmphcpqwx21f90


подпрограмма foo
print *, "Hello world!"
конец подпрограммы

C: \Пользователи \ Laszlo \ Anaconda3 \ python.exe -c "импортируют numpy.f2py как f2py2e; f2py2e.main ()" -c -m привет C: \ Users \ Laszlo \ AppData \ Local \ Temp \ tmphcpqwx21f90 --fcompiler = g95

1

import hello
hello.foo()

---------------------------------------------------------------------------
ImportErrorTraceback (последний вызов был последним)
in ()
----> 1 импорт hello
2 hello.foo ()

ImportError: Нет модуля с именем 'hello'

Теперь я понятия не имею, как заставить его работать на моем W10 / Anaconda. Пожалуйста, помогите мне решить это! Заранее спасибо! Л.

...