使用f2py创建可分发的windows python模块

使用f2py创建可分发的windows python模块,python,windows,gfortran,f2py,Python,Windows,Gfortran,F2py,我已经用python和f2py编写了一些代码,主要使用linux。这一切都很好,但现在我想与windows用户分享这一点,所以我正在尝试制作一个模块,该模块可分发给不一定具有gfortran或gcc的用户。我可以访问windows xp设备,我正在使用mingw和gfortran。我可以在那台机器上编译和使用模块,但在其他机器上,pyd创建的似乎需要dll的libgcc和libgfortran。以下是一个例子: 编译 python c:\path\to\python\scripts\f2py.p

我已经用python和f2py编写了一些代码,主要使用linux。这一切都很好,但现在我想与windows用户分享这一点,所以我正在尝试制作一个模块,该模块可分发给不一定具有gfortran或gcc的用户。我可以访问windows xp设备,我正在使用mingw和gfortran。我可以在那台机器上编译和使用模块,但在其他机器上,pyd创建的似乎需要dll的libgcc和libgfortran。以下是一个例子:

编译

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.

使用dependency walker,我发现它找不到libgcc_s_dw2-1.dll和libgfortran-3.dll的dll。有没有可能创建一个可以分发的pyd,而不用假设用户有gcc和gfortran?我在两台机器上都使用python2.7,都是32位的。一个是xp,另一个是windows 7。

作为包中包含
libgcc
libgfortran
DLL的替代方案,应该可以链接这些库的静态版本,前提是这些库在您的MinGW版本中可用。(至少,我认为是这样。我没有Python或pyds方面的经验,但对于常规可执行文件和DLL也是可能的。)


查看链接的
-static
选项,或者如果需要更多控制
-static libgcc
-static libgfortran
作为在包中包含
libgcc
libgfortran
DLL的替代方法,应该可以针对这些库的静态版本进行链接,前提是它们在您的MinGW版本中可用。(至少,我认为是这样。我没有Python或pyds方面的经验,但对于常规可执行文件和DLL也是可能的。)


查看链接的
-static
选项,或者如果需要更多控制
-static libgcc
-static libgfortran

为什么不使用pyd重新分发mingw的libgcc__dw2-1.dll和libgfortran-3.dll?好吧,最终我想使用setup.py为模块构建一个二进制文件。我不知道如何将dll添加到二进制文件中。使用distutils包\数据或数据\文件()好的,我想我的问题是我使用的编译器。例如,如果您不使用mingw编译器,而是从下载gfortran,并确保它首先在您的路径中,然后编译它似乎可以正常工作。这几乎就是上面的说明,所以如果我读得正确的话,它会工作的。为什么不用pyd重新分发mingw的libgcc_s_dw2-1.dll和libgfortran-3.dll呢?好吧,最后我想使用setup.py为模块构建一个二进制文件。我不知道如何将dll添加到二进制文件中。使用distutils包\数据或数据\文件()好的,我想我的问题是我使用的编译器。例如,如果您不使用mingw编译器,而是从下载gfortran,并确保它首先在您的路径中,然后编译它似乎可以正常工作。这几乎就是上面的说明,所以如果我读得好的话,它会起作用的。这是我成功使用的方法。默认情况下,mingwgcc(带有gfortran)使用共享libs。这是我成功使用的方法。默认情况下,mingwgcc(带有gfortran)使用共享lib。
DLL load failed: The specified module could not be found.