Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaçage autre langage Python Discussion :

f2py pour fortran


Sujet :

Interfaçage autre langage Python

  1. #1
    Futur Membre du Club
    f2py pour fortran
    Bonjour, je dois faire un programme (pour du calcul scientifique) et j'aimerais utiliser fortran et python.

    j'essaye depuis hier d'installer f2py pour pouvoir utiliser du fortran dans mon programme python, mais je n'arrive pas à le faire marcher.

    je suis sous windows 7 , j'ai installé mingw pour compiler les programmes fortran, j'ai installé python et numpy, (mes programmes avec python et numpy fonctionnent)
    mais je n'arrive pas à faire fonctionner f2py, qui est pourtant supposé faire partie de numpy

    j'ai suivi ce tutorial :
    http://www.engr.ucsb.edu/~shell/che210d/f2py.pdf

    ils me disent : pour compiler un module avec f2py, entrez une commande de la forme suivante :
    f2py –c –m MODULENAME SOURCE.f90 --fcompiler=gnu95 --compiler=mingw32

    donc j'ai testé ça, mais au lieu de compiler, ça m'affiche cette erreur :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
     
    C:\Users\Camille\Desktop\Paul\stage\Programmes python> f2py -c -m hello.f90 --fc
    ompiler=gnu95 --compiler=mingw32
    running build
    running config_cc
    unifing config_cc, config, build_clib, build_ext, build commands --compiler opti
    ons
    running config_fc
    unifing config_fc, config, build_clib, build_ext, build commands --fcompiler opt
    ions
    running build_src
    build_src
    building extension "hello.f90" sources
    build_src: building npy-pkg config files
    running build_ext
    Traceback (most recent call last):
      File "C:\Program Files\Python35-32\Scripts\f2py.py", line 28, in <module>
        main()
      File "c:\program files\python35-32\lib\site-packages\numpy\f2py\f2py2e.py", li
    ne 648, in main
        run_compile()
      File "c:\program files\python35-32\lib\site-packages\numpy\f2py\f2py2e.py", li
    ne 633, in run_compile
        setup(ext_modules=[ext])
      File "c:\program files\python35-32\lib\site-packages\numpy\distutils\core.py",
     line 169, in setup
        return old_setup(**new_attr)
      File "c:\program files\python35-32\lib\distutils\core.py", line 148, in setup
        dist.run_commands()
      File "c:\program files\python35-32\lib\distutils\dist.py", line 955, in run_co
    mmands
        self.run_command(cmd)
      File "c:\program files\python35-32\lib\distutils\dist.py", line 974, in run_co
    mmand
        cmd_obj.run()
      File "c:\program files\python35-32\lib\site-packages\numpy\distutils\command\b
    uild.py", line 47, in run
        old_build.run(self)
      File "c:\program files\python35-32\lib\distutils\command\build.py", line 135,
    in run
        self.run_command(cmd_name)
      File "c:\program files\python35-32\lib\distutils\cmd.py", line 313, in run_com
    mand
        self.distribution.run_command(command)
      File "c:\program files\python35-32\lib\distutils\dist.py", line 974, in run_co
    mmand
        cmd_obj.run()
      File "c:\program files\python35-32\lib\site-packages\numpy\distutils\command\b
    uild_ext.py", line 117, in run
        force=self.force)
      File "c:\program files\python35-32\lib\site-packages\numpy\distutils\ccompiler
    .py", line 596, in new_compiler
        compiler = klass(None, dry_run, force)
      File "c:\program files\python35-32\lib\site-packages\numpy\distutils\mingw32cc
    ompiler.py", line 58, in __init__
        dry_run, force)
      File "c:\program files\python35-32\lib\distutils\cygwinccompiler.py", line 157
    , in __init__
        self.dll_libraries = get_msvcr()
      File "c:\program files\python35-32\lib\distutils\cygwinccompiler.py", line 86,
     in get_msvcr
        raise ValueError("Unknown MS Compiler version %s " % msc_ver)
    ValueError: Unknown MS Compiler version 1900
     
    C:\Users\Camille\Desktop\Paul\stage\Programmes python>


    quelqu'un pourrait m'aider à déchiffrer ça ?

  2. #2
    Expert éminent sénior
    Citation Envoyé par isaz24 Voir le message
    quelqu'un pourrait m'aider à déchiffrer ça ?
    Lorsque vous avez ce genre de problème, le plus simple est de lancer une recherche avec votre moteur favori sur "ValueError: Unknown MS Compiler version 1900". Il faut lire les différentes entrées, voir si elles s'appliquent à votre cas, appliquer la solution s'il y en a.
    Seuls pourraient vous aider ceux qui ayant suivi le même chemin que vous ont déjà trié et testé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent
    Bonjour,

    Juste une idée.

    Bizarrement, tu as demandé le compilateur mingw dans la ligne de commande, mais il échoue parce qu'il ne trouve pas le compilateur de Microsoft...

    Il est possible que la nature du code en question nécessite impérativement le compilateur de Microsoft, auquel cas, il est possible de l'installer: Visual Studio (la version gratuite suffit).

    Mais il est possible aussi qu'il soit nécessaire de préciser le choix du compilateur à un autre endroit que la ligne de commande. Ça m'est déjà arrivé avec Cython: comme j'ai les 2 compilateurs, la compilation appelle par défaut le compilateur de Microsoft. Si je veux mingw, je le précise dans un petit fichier texte appelé "setup.cfg" et contenant:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    [build]
    compiler = mingw32


    Pour le compilateur de Microsoft, il suffit de mettre "msvc" à la place.

    Regarde dans ta doc si il n'y a pas une astuce de ce genre.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Futur Membre du Club
    Citation Envoyé par wiztricks Voir le message
    Lorsque vous avez ce genre de problème, le plus simple est de lancer une recherche avec votre moteur favori sur "ValueError: Unknown MS Compiler version 1900". Il faut lire les différentes entrées, voir si elles s'appliquent à votre cas, appliquer la solution s'il y en a.
    Seuls pourraient vous aider ceux qui ayant suivi le même chemin que vous ont déjà trié et testé.

    - W
    c'est la première chose que j'ai faite, mais je n'ai pas trouvé de résultat correspondant vraiment à ma situation.



    Il est possible que la nature du code en question nécessite impérativement le compilateur de Microsoft, auquel cas, il est possible de l'installer: Visual Studio (la version gratuite suffit).
    j'ai essayé de le télécharger, mais après plusieurs heures d'installation , le programme d'installation m'a annoncé que l'installation avait échoué.

  5. #5
    Expert éminent
    Bonjour,

    J'ai un peu regardé f2py (qui est effectivement dans numpy), et il y a beaucoup de subtilités et peu de doc à jour. Bref, en 1 heure et en utilisant les infos disponibles j'arrive à compiler sans erreur, mais pas à importer... Apparemment, même si on compile avec mingw32, on a besoin de la dll de Windows, probablement pour assurer la connexion avec Python, mais il faut la bonne: celle du Visual Studio utilisé pour compiler Python (msvcr100.dll pour Python 3.4?) et la bonne version 32 ou 64bits. Bref, j'arrête: c'est beaucoup trop compliqué (pour moi en tout cas ).

    Ton objectif est-il d'utiliser fortran, ou de faire seulement des morceaux de code plus rapide?

    Si c'est le 2ème objectif:

    - tu devrais plutôt utiliser Cython: c'est plus proche de Python qui est écrit en C et ça marche très bien: le code Python est un peu modifié (ex: déclaration des variables) puis est converti en C (ou en C++) et compilé. J'ai fait un petit tuto sur le sujet: http://python.jpvweb.com/mesrecettespython/doku.php?id=exemple_cython_cpp.

    - certains calculs sont très accélérés en utilisant simplement des modules spécialisés pour le calcul comme gmpy2 ou mpmath (les 2 sont facilement installés avec pip). Dans un de mes programmes utilisant des entiers longs, j'ai ainsi divisé par 15 le temps d'exécution en utilisant seulement gmpy2.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Expert éminent sénior
    Citation Envoyé par isaz24 Voir le message
    c'est la première chose que j'ai faite, mais je n'ai pas trouvé de résultat correspondant vraiment à ma situation.
    Bizarre! La première entrée que me retourne Google décrit un problème fort similaire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

###raw>template_hook.ano_emploi###