Saturday, 24 April 2010

Programmi Fortran e Python: una modalità di compilazione sotto Windows

Lavoriamo con Python sotto Windows e vogliamo utilizzare delle funzioni scritte in Fortran.
Uno strumento adatto e semplice è F2PY che, attraverso la creazione semi-automatica di “signature files” (http://cens.ioc.ee/projects/f2py2e/), permette di creare moduli Python a partire da codici Fortran.

In Windows esiste però il vincolo del software proprietario utilizzato per compilare Python, e conseguentemente delle versioni delle librerie collegate. Le versioni recenti di Python (>= 2.6) sono compilate con Microsoft Visual Studio 2008 e richiedono il collegamento alla libreria msvcr90.dll di Studio 2008. Un compilatore open source come mingw32 è basato su msvcrt6.dll. Possiamo non disporre, o non voler utilizzare, le versioni commerciale o gratuita (Express, http://www.microsoft.com/express/) di Visual Studio.

Per aggirare il problema, escludendo di ricompilare l'intero codice sorgente di Python con un compilatore open source come gcc o simili, si può utilizzare Python sotto Cygwin, un emulatore di Linux per Windows, oppure più semplicemente modificare alcuni settaggi del sistema per potere utilizzare un compilatore free come gfortran.

Un esempio di questa seconda modalità è ben spiegata in questa breve pagina da SciPy, http://www.scipy.org/F2PY_Windows. Se usate Python 2.6 o 2.7 la dll da linkare è msvcr90.dll (di Visual Studio 2008), mentre se usate Python 2.5,  la dll è msvcr71.dll (di Visual Studio 2003).

Nota: utilizzando subroutine Fortran, almeno nel mio caso il risultato viene trattato da Python come un Fortran object. Se invece utilizzate delle funzioni, il risultato viene immediatamente riconosciuto come oggetti Python (numeri, etc.).

No comments: