2013-06-05 4 views
12

Я пытаюсь построить расширение Python из источника Fortran, используя сценарий Numpy f2py.py. Я выполняю шаги с http://www.scipy.org/F2PY_Windows (web archive). Моя система - 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Создание 64-разрядных расширений Python с f2py в Windows

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

  1. Выберите Fortran компилятор. Поскольку я использую 64-битный Python, требуется 64-битный компилятор Fortran. От MinGW-w64, я пробовал несколько личных сборников.
  2. Открыть новую cmd.exe оболочки и отредактировать путь туда, где я извлек компиляторов GCC, а именно:
    • set PATH=%PATH%;c:\gnu\mingw64\bin
    • set C_INCLUDE_PATH=C:\gnu\mingw64\include
  3. Try в 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?

ответ

8

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

+1

Это похоже на работу. Кроме того, мне пришлось удалить флаг -lmsvcr90' в f2py. –

+0

То же самое для меня, за исключением того, что я не запускал f2py напрямую, он вызывался изнутри через numpy distutils. Это сообщение помогло мне (и обратите внимание, чтобы удалить созданный файл libmsvcr90.a'): http://mechaos.de/wordpress/?p=303#comment-169 –

1

Я имел подобную ошибку при попытке установить ggplot с

pip install -U ggplot 

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

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

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^