2013-06-05 36 views
12

Tôi đang cố xây dựng tiện ích mở rộng Python từ nguồn Fortran bằng cách sử dụng tập lệnh f2py.py của Numpy. Tôi đang theo các bước từ http://www.scipy.org/F2PY_Windows (web archive). Hệ thống của tôi là Windows 7 64 bit và tôi chủ yếu sử dụng Python 2.7.3 [MSC v.1500 64 bit (AMD64)]. Tôi có NumPy-MKL 1.7.1, từ http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpyXây dựng các tiện ích mở rộng Python 64 bit với f2py trên Windows

Dưới đây là những gì tôi đã cố gắng:

  1. Chọn một trình biên dịch Fortran. Vì tôi đang sử dụng Python 64 bit, cần có trình biên dịch Fortran 64 bit. Từ MinGW-w64, tôi đã thử một vài bản dựng cá nhân.
  2. Mở cmd.exe vỏ mới, và chỉnh sửa đường dẫn đến nơi tôi trích xuất các trình biên dịch GCC, ví dụ:
    • set PATH=%PATH%;c:\gnu\mingw64\bin
    • set C_INCLUDE_PATH=C:\gnu\mingw64\include
  3. Thử f2py.py xây dựng với lệnh này:

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

(đường loại bỏ tiếng ồn tại <--snip-->)

Kết quả là:

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 

Lưu ý rằng lần đầu tiên điều này được chạy, ba tập tin mới được xây dựng trong C:\Python27\libs:

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

Tôi có cần phải cài đặt gì khác không? Tôi có cần cung cấp các tùy chọn khác cho f2py không? Nói chung hơn, nó có thể xây dựng một phần mở rộng cho MSVC-xây dựng Python từ trình biên dịch GNU?

Trả lời

8

Dường như giải pháp là chỉ cần nhận xét ra dòng ngoại lệ. Xem này blog post.

+1

Điều đó dường như hoạt động. Ngoài ra, tôi đã phải loại bỏ cờ '-lmsvcr90' thành f2py. –

+0

Tương tự đối với tôi, ngoại trừ việc tôi không chạy trực tiếp f2py, nó được gọi nội bộ qua các đường rãnh cứng nhắc. Bài đăng này đã giúp tôi (và lưu ý xóa tệp 'libmsvcr90.a' đã được tạo): http://mechaos.de/wordpress/?p=303#comment-169 –

1

Tôi đã có những lỗi tương tự khi cố gắng cài đặt ggplot với

pip install -U ggplot 

Các giải pháp đã được tìm thấy ở đây: https://github.com/obspy/obspy/wiki/Installation-via-Anaconda

Anaconda cho Windows tàu với trình biên dịch C và Fortran, tuy nhiên biên soạn trên 64bit Windows có thể yêu cầu một bản vá nhỏ bằng cách thay đổi số dòng số. 331 trong AnacondaInstallDir \ Lib \ site-packages \ numpy \ distutils \ fcompiler \ gnu.py để vượt qua #raise NotImplementedError ("Chỉ trình biên dịch MS được hỗ trợ với gfortran trên win64").

0

Điều này sẽ được khắc phục trong bản phát hành tương lai, discussedchanged.

Dường như thay đổi này không được chuyển sang chi nhánh bảo trì 1.9.x, nhưng trong cây chính và bất kỳ phiên bản nào sau đó.

Các vấn đề liên quan