Partage
  • Partager sur Facebook
  • Partager sur Twitter

No module named cython.Build

    16 juillet 2019 à 16:23:09

    Bonjour,

    J'ai créé un programme python qui fonctionne parfaitement seulement il est très long, son exécution prend de quelques minutes à quelques heures. Je voudrais donc accélérer l’exécution de ce programme avec le module Cython d'autant plus que mon programme utilise beaucoup le module numpy sur lequel il est efficace.

    J'ai déjà installer cython via la commande py -m pip install cython, j'ai mis à jour pip. Rien n'y fait lorsque je tape 'from cython.Build import cythonize', python me renvoie No module named cython.Build, Cython is not a package. J'ai lu une bonne trentaine de forum et des sites je ne trouve aucune solution qui marche et je désespère un peu.

    Quel peut être le problème et comment le résoudre?

    Par avance merci.

    • Partager sur Facebook
    • Partager sur Twitter
      16 juillet 2019 à 23:40:29

      Petite précision, j'utilise EduPython 2.5 pour coder (je pense que c'est la dernière version) et j'ai téléchargé la version 0.29.12 de cython
      • Partager sur Facebook
      • Partager sur Twitter
        17 juillet 2019 à 9:13:20

        Il faut écrire ça :

        from Cython.Build import cythonize

        En respectant les majuscules.

        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2019 à 12:00:42

          trama a écrit:

          Bonjour,

          J'ai créé un programme python qui fonctionne parfaitement seulement il est très long, son exécution prend de quelques minutes à quelques heures. Je voudrais donc accélérer l’exécution de ce programme avec le module Cython d'autant plus que mon programme utilise beaucoup le module numpy sur lequel il est efficace.


          Avant que tu te lances dans quelque chose de compliqué et peut-être d'inutile, je te conseillerais, en particulier si tu es débutant, d'examiner la complexité de ton algorithme et éventuellement de le changer, c'est la source la plus importante, et de loin, de toute accélération de code.

          En admettant que ton algorithme soit optimal avec la bonne complexité, il se peut que tu aies besoin de booster Python (et tout dépend de tes objectifs). Ne crois pas que Cython va accélérer ton code sans rien faire. Tu peux lancer Cython sur du code Python mais la plupart d temps, le gain est très modeste. Tu vas devoir typer tes variables et éventuellement faire des choses plus compliquées, grosso modo tu vas devoir écrire du C en Python, avec des allocations dynamiques et des libérations (à moins que tu n'utilises du C++ et la STL ou RAII).

          Vu que tu dis que ton code va utiliser des tableaus Numpy, je te conseille avant de te lancer dans Cython (je vois que tu galères juste pour l'installer) d'examiner Numba qui permet d'atteindre les performances d'un code C/C++ en n'écrivant que du Python. Attention, ça ne marche que pour un certain type de code, du code qui fait de lourdes opérations mathématiques dans des boucles sur des tableaux Numpy. Tu peux obtenir des performances même meilleures que du C++. Tu peux aussi paralléliser assez facilement (mais c'est aussi assez facile en Cython) et même envoyer ton code sur ton GPU assez facilement.

          Mais je répète, tout code Python ne sera pas optimisé par Numba, voir ici pour les cas d'usage. En outre, sous EduPython, c'est peut-être compliqué à installer.

          • Partager sur Facebook
          • Partager sur Twitter
            18 juillet 2019 à 0:07:35

            Merci beaucoup pour le conseil, je ne connaissais pas la solution numba qui semble effectivement efficace et plus simple d'utilisation. J'ai fait un petit test le programme a mis 1 min 10 avec numba contre 8min 23 sans le gain est important.

            Petite information pour les utilisateurs novices d'EduPython (comme moi) qui tomberont sur ce forum, pour installer de nouveaux modules il faut préalablement installer get-pip.py comme expliqué sur ce lien http://info.blaisepascal.fr/edupython pour installer numba utilisez conda et lorsque la commande demande proceed [y]/n? taper yes entrer.

            • Partager sur Facebook
            • Partager sur Twitter
              18 juillet 2019 à 0:42:46

              trama a écrit:

              Merci beaucoup pour le conseil, je ne connaissais pas la solution numba qui semble effectivement efficace et plus simple d'utilisation. J'ai fait un petit test le programme a mis 1 min 10 avec numba contre 8min 23 sans le gain est important.

              En principe les gains sont beaucoup plus importants (jusqu'à des facteurs de l'ordre de 100) mais il ne faut travailler qu'avec des objets Numpy (et encore, pas tous) et ne pas sortir du mode "nopython". Vous auriez pu  essayer Pypy mais comme vous avez du Numpy, ça ne donnera rien. Faudra peut-être essayer Cython alors ;)

              trama a écrit:

              Petite information pour les utilisateurs novices d'EduPython (comme moi) qui tomberont sur ce forum, pour installer de nouveaux modules il faut préalablement installer get-pip.py comme expliqué sur ce lien http://info.blaisepascal.fr/edupython pour installer numba utilisez conda et lorsque la commande demande proceed [y]/n? taper yes entrer.

              Voilà,qui est utile et bien sympa !
              • Partager sur Facebook
              • Partager sur Twitter
                18 juillet 2019 à 8:51:55

                Et c'est possible de combiner ? Par ex pypy + numba
                • Partager sur Facebook
                • Partager sur Twitter
                  18 juillet 2019 à 11:51:03

                  thelinekioubeur a écrit:

                  Et c'est possible de combiner ? Par ex pypy + numba


                  Tiens oui, pourquoi pas cumuler ! Alors, j'aurais dit que non car Pypy supporte mal les extensions C (et c'est le cas de Numba même si le backend est LLVM) mais visiblement ce serait possible, comme le montrent qq benchmarks ICI mais bon, ça semble vraiment assez expérimental, d'ailleurs tous les tests ne passent pas !
                  • Partager sur Facebook
                  • Partager sur Twitter

                  No module named cython.Build

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  • Editeur
                  • Markdown