skabe distribuerbare windows python modul med f2py

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har skrevet nogle kode med python og f2py, hovedsagelig ved hjælp af linux. Dette virker fint, men nu vil jeg gerne dele dette med Windows-brugere, så jeg forsøger at lave et modul, der kan distribueres til brugere, der ikke nødvendigvis har Gfortran eller Gcc. Jeg har adgang til en Windows XP-boks , bruger mingw med gfortran. Jeg kan kompilere og bruge modulet på den pågældende maskine, men på andre maskiner synes den oprettede pyd at kræve dll'ens libgcc og libgfortran. Her er et eksempel fra http://www.scipy.org/F2PY\_Windows:[9]]]


subroutine hello ()
   write(*,*)'Hello from Fortran90!!!'
end subroutine hello


Kompilere med


python c:path	opythonscriptsf2py.py -c 
       --fcompiler=gnu95 --compiler=mingw32 
        -lmsvcr71 -m foo foo.f90


Dette virker som forventet på maskinen jeg kompilerede det med, men hvis jeg kopierer det til en anden maskine, får jeg det


DLL load failed: The specified module could not be found.


Ved hjælp af afhængighedsvælger ser jeg det ikke kan finde dll'erne for libgcc\_s\_dw2-1.dll og libgfortran-3.dll. Er det muligt at oprette en pyd, som jeg kan distribuere uden at antage at brugeren har gcc og gfortran? Jeg bruger python2.7 på begge maskiner, begge 32bit. Den ene er xp, de andre vinduer 7.

Bedste reference


Som et alternativ til at inkludere libgcc og libgfortran dll'er i pakken, skal det være muligt at forbinde de statiske versioner af disse biblioteker, forudsat at de er tilgængelige i din build af MinGW. (I hvert fald antager jeg det er. Jeg har ingen erfaring med Python eller Pyds, men det er muligt for regelmæssige eksekverbare og dll'er.)


Se på -static mulighed for at forbinde, eller hvis du har brug for mere kontrol -static-libgcc og -static-libgfortran.