【发布时间】:2012-04-03 02:44:49
【问题描述】:
我用 python 和 f2py 编写了一些代码,主要是使用 linux。这一切都很好,但现在我想与 Windows 用户分享它,所以我正在尝试制作一个可分发给不一定有 gfortran 或 gcc 的用户的模块。我可以访问 windows xp 盒子,正在使用 mingw 和 gfortran。我可以在该机器上编译和使用该模块,但在其他机器上创建的 pyd 似乎需要 dll 的 libgcc 和 libgfortran。以下是来自http://www.scipy.org/F2PY_Windows 的示例:
subroutine hello ()
write(*,*)'Hello from Fortran90!!!'
end subroutine hello
编译
python c:\path\to\python\scripts\f2py.py -c \
--fcompiler=gnu95 --compiler=mingw32 \
-lmsvcr71 -m foo foo.f90
这在我编译它的机器上按预期工作,但是如果我将它复制到另一台机器上,我会得到
DLL load failed: The specified module could not be found.
使用依赖walker,我发现它找不到libgcc_s_dw2-1.dll 和libgfortran-3.dll 的dll。是否可以在不假设用户拥有 gcc 和 gfortran 的情况下创建一个我可以分发的 pyd?我在两台机器上都使用 python2.7,都是 32 位的。一个是xp,另一个是windows 7。
【问题讨论】:
-
为什么不使用 pyd 重新分发 mingw 的 libgcc_s_dw2-1.dll 和 libgfortran-3.dll?
-
好吧,最终我想使用 setup.py 为模块构建二进制文件。我不知道如何将 dll 添加到二进制文件中。
-
使用 distutils package_data 或 data_files (docs.python.org/distutils/setupscript.html)
标签: python windows gfortran f2py