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:
- 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.
- 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
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
<--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?
Điều đó dường như hoạt động. Ngoài ra, tôi đã phải loại bỏ cờ '-lmsvcr90' thành f2py. –
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 –