2 votes

f2py ne s'importe pas correctement, malgré une compilation réussie.

Je compile avec succès mon sous-routine Fortran avec f2py. Cependant, un dossier est créé ainsi qu'un fichier pyd.

Si je ne place pas le fichier pyd créé dans le dossier généré, j'obtiens cette erreur

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

Si je place le fichier .pyd généré dans le dossier généré, mon python script s'exécute et l'importation semble fonctionner. Cependant, si j'exécute print(energy_f2py.__doc__) None est la sortie, et quand j'essaie d'utiliser le sous-programme, j'obtiens une erreur AttributeError: module 'energy_f2py' has no attribute 'potential_3'

potential_3 est le nom de la subroutine à l'intérieur de energy_f2py.f90

J'ai aussi essayé de faire energy_f2py.f90 un module contenant la sous-routine, sans aucune différence dans les résultats.

Voici le fichier pyd qui est généré energy_f2py.cp36-win_amd64.pyd . J'utilise la ligne de commande de Pycharm (Windows 10 64 bit) pour compiler le fichier Fortran en utilisant la méthode suivante

  1. f2py -c -m energy_f2py energy_f2py.f90

  2. python -m numpy.f2py -c -m energy_f2py energy_f2py.f90

La même chose se produit.

Il me semble bizarre que le fichier pyd soit créé ainsi qu'un dossier, voir l'image ci-dessous. enter image description here

Je suis bloqué à ce stade... il semble qu'il y ait 95% du chemin à parcourir pour travailler...

Enfin, cet autre poste proposait une solution consistant à donner des noms différents aux modules Python et Fortran. J'ai essayé cela, et cela n'a pas fait de différence non plus.

2voto

Charlie Crown Points 385

La meilleure solution que j'ai trouvée et qui a fonctionné a été de partitionner mon disque dur et d'installer Linux. J'ai choisi d'utiliser Lubuntu, mais vous pouvez utiliser n'importe quoi.

Tout fonctionne comme il se doit sous Linux.

2voto

Status Points 23

Une autre option est d'en faire une construction statique, avec l'attribut -static drapeau. Cela construit tout ce qui est nécessaire dans un seul fichier :

python -m numpy.f2py -c -m energy_f2py energy_f2py.f90 -static

Vous devriez alors être en mesure d'utiliser cette .pyd quel que soit le dossier dans lequel vous l'avez placé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X