Создание 64-битных расширений Python с f2py в Windows

Я пытаюсь построить расширение Python из источника Fortran, используя Numpy f2py.py script. Я следую шагам из http://www.scipy.org/F2PY_Windows (веб-архив). Моя система - 64-разрядная Windows 7, и я в основном использую Python 2.7.3 [MSC v.1500 64 бит (AMD64)]. У меня есть Numpy-MKL 1.7.1, от http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

Вот что я пробовал:

  • Выберите компилятор Fortran. Поскольку я использую 64-битный Python, требуется 64-битный компилятор Fortran. Из MinGW-w64 я пробовал несколько личных сборников.
  • Откройте новую оболочку cmd.exe и отредактируйте путь к тому, где я извлек компиляторы GCC, т.е.:
    • set PATH=%PATH%;c:\gnu\mingw64\bin
    • set C_INCLUDE_PATH=C:\gnu\mingw64\include
  • Попробуйте создать f2py.py с помощью этой команды:

    C:\Python27\python.exe C:\Python27\Scripts\f2py.py -c --fcompiler=gnu95 --compiler=mingw32 -lmsvcr90 -m foo foo.f90

Выход (удаление шумовых линий при <--snip-->):

running build
<--snip-->
Reading fortran codes...
        Reading file 'foo.f90' (format:free)
Post-processing...
        Block: foo
                        Block: hello
Post-processing (stage 2)...
Building modules...
        Building module "foo"...
                Constructing wrapper function "hello"...
                  hello()
        Wrote C/API module "foo" to file "c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7\foomodule.c"
  adding 'c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7\fortranobject.c' to sources.
  adding 'c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7' to include_dirs.
copying C:\Python27\lib\site-packages\numpy\f2py\src\fortranobject.c -> c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7
copying C:\Python27\lib\site-packages\numpy\f2py\src\fortranobject.h -> c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7
build_src: building npy-pkg config files
running build_ext
Looking for python27.dll
Building import library (arch=AMD64): "C:\Python27\libs\libpython27.a" (from C:\Windows\system32\python27.dll)
Building msvcr library: "C:\Python27\libs\libmsvcr90.a" (from C:\Windows\winsxs\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcr90.dll)
Cannot build msvcr library: "msvcr90d.dll" not found
customize Mingw32CCompiler
customize Mingw32CCompiler using build_ext
customize Gnu95FCompiler
Found executable c:\gnu\mingw64\bin\gfortran.exe
Found executable c:\gnu\mingw64\bin\gfortran.exe
Traceback (most recent call last):
  File "C:\Python27\Scripts\f2py.py", line 24, in <module>
    main()
<--snip-->
  File "C:\Python27\lib\site-packages\numpy\distutils\fcompiler\gnu.py", line 331, in get_libraries
    raise NotImplementedError("Only MS compiler supported with gfortran on win64")
NotImplementedError: Only MS compiler supported with gfortran on win64

Обратите внимание, что при первом запуске три новых файла строятся в C:\Python27\libs:

  • libmsvcr90.a
  • libpython27.a
  • python27.def

Мне нужно установить что-нибудь еще? Нужно ли предоставлять другие параметры f2py? В более общем плане, можно построить расширение для MSVC-build Python из компиляторов GNU?

Ответ 1

Кажется, что решение состоит в том, чтобы просто прокомментировать строку исключений. См. Этот пост в блоге.

Ответ 2

У меня была аналогичная ошибка при попытке установить ggplot с помощью

pip install -U ggplot

Решение найдено здесь: https://github.com/obspy/obspy/wiki/Installation-via-Anaconda

Anaconda для Windows поставляется с компиляторами C и Fortran, однако для компиляции на 64-битной Windows может потребоваться небольшой патч, изменив строка №. 331 в AnacondaInstallDir\Lib\сайт-пакеты\NumPy\Distutils\fcompiler\gnu.py передать #raise NotImplementedError ( "Только компилятор MS, поддерживаемый gfortran на win64" ).

Ответ 3

Это должно быть исправлено в следующей версии, обсуждено и изменил.

Похоже, что это изменение не попало в ветку обслуживания 1.9.x, но в главном дереве и в любой версии после.