+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Invité de passage
    Homme Profil pro
    Lycéen
    Inscrit en
    octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : octobre 2012
    Messages : 7
    Points : 2
    Points
    2

    Par défaut Compiler avec Cython - plusieurs fichiers

    Bonjour à tous.
    Je recherche depuis un moment un moyen de compiler mes codes Python avec Cython pour les distribuer sans dépendances. Alors il y a cx_Freeze qui marche assez bien, mais il ne fonctionne pas dans mon projet actuel et ne permet pas de gain de performances (pas compiler, ça embarque juste l'interpréteur).
    J'ai réussi à compiler un fichier python avec Microsoft Visual Studio C++ et je me suis fait une sorte de protocole :
    Compilation (cython) avec Microsoft Visual Studio C++ :

    1 - Compiler votre programme *.py (celui qu'il faut lancer en premier) avec cython.
    (cmd : C:\Python32\python.exe C:\Python32\Scripts\cython.py main.py --embed -o main.c
    --embed pour avoir un point d'entrée main(), et donc avoir un programme fonctionnant sans dépendances.)

    2 - Lancer Visual Studio C++, créer un nouveau projet, mettre votre fichier .c créé à partir de cython.

    3 - Ajouter le dossier /Pythonxx/include/ dans
    -- propriété > Propriétés de configuration > C/C++ > Général > Autres répertoires include.
    Il s'agit d'indiquer où trouver les .h (headers) de l'interpreteur Python.

    4 - Ajouter les dossiers /Pythonxx/Lib/ et /Pythonxx/libs/ dans
    -- propriété > Propriétés de configuration > Editeur de liens > Répertoires de blibliothèques supplémentaires

    5 - Lancer la compilation (vérifiez que vous compiler en 32 bits pour un programme 32 bits, avec Python 32 bits, et vos modules 32 bits,
    ou 64 bits si vous voulez un programme 64 bits, et que vous avez Python 64 bits avec les modules en 64 bits.)

    6 - Un terminal s'ouvrira puis se refermera si vous avez besoin de ressources externes comme d'autres fichiers *.py (ou *.pyd compilés
    avec Cython pour bénéficier de la rapiditée accrue !), images, sons, autre...

    7 - Placer ces éléments dans le répertoire où se trouve votre .exe (mais laissez bien sûr les fichiers
    dans leurs dossier s'ils sont dans un dossier).

    8 - Lancer votre executable.
    Je suis arrivé à avoir donc un exécutable qui fonctionne. Le soucis, c'est que mon programme s'étend dans plusieurs fichiers, et Cython ne les récupère pas automatiquement (j'ai placés ces fichiers quand même .py, et ça marche, sauf qu'il faut avoir installé Python, donc l'intérêt tombe à l'eau, surtout que ça change rien niveau perfs).
    Donc j'aimerai savoir si vous aviez une solution pour compiler ces fichiers aussi, de manière à qu'ils soient indépendants.
    Les mettre en .pyd (ou .pxd) ? Si oui, comment fait-on avec Cython ? (même avec la documentation officielle, je comprends pas exactement comment ça se passe)
    Si je n'ai pas énoncé avec assez de précisions, n'hésitez pas à m'en demander davantage !

    Merci d'avance !

  2. #2
    Expert Confirmé
    Avatar de fred1599
    Homme Profil pro
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 840
    Points : 2 856
    Points
    2 856

    Par défaut

    Pour avoir utilisé cython un moment je te passe le tutoriel avec lequel j'ai appris.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Invité de passage
    Homme Profil pro
    Lycéen
    Inscrit en
    octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : octobre 2012
    Messages : 7
    Points : 2
    Points
    2

    Par défaut

    Oui, j'ai aussi utilisé ce tutoriel !
    Effectivement, il y a une partie de ce que je veux.
    voilà donc un fichier hello.so qui est une extension python que nous pouvons utiliser
    Mais la ligne de commande qui va avec permet de compiler sous linux, et en tout cas Fedora, alors que moi je veux compiler sous Windows, et il y a des choses dont je n'ai aucune idée de comment traduire pour que cela soit compilé sous Windows
    J'ai le gcc de Code::blocks, CodeLite, et j'ai aussi Microsoft Visual Studio C++.
    Et je pense que sous Windows ça sera pas un .so non ?

  4. #4
    Expert Confirmé
    Avatar de fred1599
    Homme Profil pro
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 840
    Points : 2 856
    Points
    2 856

    Par défaut

    Effectivement j'ai linux et [troll]quel confort!!![/troll]

    Utilises-tu mingW? Si oui n'y a-t-il pas une console linux accessible? Je ne connais pas windows et mingW, donc c'est une question vraiment ouverte.

    Je connais aussi un posteur sur un autre forum ayant eu des problèmes avec cython et windows, donc bon courage, car à cette heure ci son problème n'est toujours pas résolu.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Invité de passage
    Homme Profil pro
    Lycéen
    Inscrit en
    octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : octobre 2012
    Messages : 7
    Points : 2
    Points
    2

    Par défaut

    Oh oui, moi aussi je préfère Linux niveau confort

    Utilises-tu mingW? Si oui n'y a-t-il pas une console linux accessible? Je ne connais pas windows et mingW, donc c'est une question vraiment ouverte.
    Bonne question, je ne sais pas, mais oui il s'agit de mingW, je regarderai (là je viens de monter mon nouveau PC dans l'après midi, donc faut que je réinstalle un peu tout).

    Je connais aussi un posteur sur un autre forum ayant eu des problèmes avec cython et windows, donc bon courage, car à cette heure ci son problème n'est toujours pas résolu.
    Ah ah, on va s'amuser ! Enfin bon, pour résumer, le problème c'est qu'il faut réussir à faire une bibliothèque du fichier comme dit dans le tutoriel (.so, sauf que sous Windows ça sera pas un .so), donc trouver une autre ligne de commande. A voir si on peut pas faire pareil via un fichier setup.py, là ça sera réglé, pareil pour tout le monde !

  6. #6
    Membre confirmé Avatar de alexdevl
    Profil pro
    Inscrit en
    avril 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : avril 2007
    Messages : 248
    Points : 290
    Points
    290

    Par défaut Avec pyinstaller 2

    Bonjour,
    Cela ne concerne pas les gains de performance, mais pour ''distribuer sans dépendances'' tes applics tu pourrais essayer pyinstaller2.
    J'ai fait un post spécifique :
    http://www.developpez.net/forums/d12...laris-and-aix/
    Alex

  7. #7
    Invité de passage
    Homme Profil pro
    Lycéen
    Inscrit en
    octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : octobre 2012
    Messages : 7
    Points : 2
    Points
    2

    Par défaut

    Bonjour,
    j'ai regardé ton post, c'est intéressant, mais je suis sous Python 3.3, hors ce module est fonctionnel uniquement pour Python 2.4 à 2.7, donc ça ne m'ira malheureusement pas pour le moment

  8. #8
    Expert Confirmé
    Avatar de fred1599
    Homme Profil pro
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 840
    Points : 2 856
    Points
    2 856

    Par défaut

    j'ai regardé ton post, c'est intéressant, mais je suis sous Python 3.3
    Ah je l'ai pas vu dans tes infos, du coup je ne sais pas non plus pour python v3 car j'utilise cython avec la v2.7
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  9. #9
    Membre confirmé Avatar de alexdevl
    Profil pro
    Inscrit en
    avril 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : avril 2007
    Messages : 248
    Points : 290
    Points
    290

    Par défaut

    Je ne sais pas pour vous, mais chaque fois que je tente python 3 il y a une lib qui m'oblige à revenir à python 2.
    A cause de cela (mais c'est un avis personnel et ce n'est pas le sujet) je reste à python 2.7
    Alex

  10. #10
    Expert Confirmé
    Avatar de fred1599
    Homme Profil pro
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 840
    Points : 2 856
    Points
    2 856

    Par défaut

    Je ne sais pas pour vous, mais chaque fois que je tente python 3 il y a une lib qui m'oblige à revenir à python 2.
    A cause de cela (mais c'est un avis personnel et ce n'est pas le sujet) je reste à python 2.7
    python 3 pour des petites choses, python 2.7 pour des projets plus ambitieux, c'est comme cela que je vois la chose.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  11. #11
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    mars 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2006
    Messages : 858
    Points : 1 153
    Points
    1 153

    Par défaut

    Salut,

    Citation Envoyé par alexdevl Voir le message
    Je ne sais pas pour vous, mais chaque fois que je tente python 3 il y a une lib qui m'oblige à revenir à python 2.
    A cause de cela (mais c'est un avis personnel et ce n'est pas le sujet) je reste à python 2.7
    Alex
    Tout pareil! Sauf que j'ai de plus en plus de mal à me justifier, la liste des librairies non encore portées s’amenuise...

    A+

    Pfeuh

  12. #12
    Invité de passage
    Homme Profil pro
    Lycéen
    Inscrit en
    octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : octobre 2012
    Messages : 7
    Points : 2
    Points
    2

    Par défaut

    Moi de mon côté, je n'ai fait qu'avec Python 3, et comme effectivement de plus en plus de libs sont portées, je ne suis pas tellement gêné. On a en tout cas pas mal de très bons modules : PySFML, Pygame, PySide, PyQT, PyGTK, bientôt MySQLdb mais il y a d'autres moyens de faire du SQL, et j'en passe. Enfin il y a de quoi faire quand même, et j'ai un petit peu la flemme d'apprendre la syntaxe de Python 2 quand celui ci est en fin de vie d'après moi (enfin il doit lui rester 1 à 2 ans au maximum ?).

  13. #13
    Expert Confirmé Sénior
    Avatar de tyrtamos
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    2 360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 2 360
    Points : 4 245
    Points
    4 245
    Billets dans le blog
    1

    Par défaut

    Bonjour,

    Juste un petit point de détail que j'ai mis un certain temps à découvrir.

    Quand on a en même temps Visual Studio et mingw32, il se pose un problème: quand cython prend par défaut Visual Studio, comment fait-on pour lui dire de prendre mingw32 à la place?

    Simple: on crée un fichier texte appelé setup.cfg, placé dans le même répertoire que le setup.py, et contenant:

    Code :
    1
    2
    [build]
    compiler = mingw32
    (cependant, ça ne semble pas fonctionner avec pyximport)
    Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos...
    Mes recettes python: http://www.jpvweb.com

  14. #14
    Invité de passage
    Homme Profil pro
    Lycéen
    Inscrit en
    octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : octobre 2012
    Messages : 7
    Points : 2
    Points
    2

    Par défaut

    Arg effectivement !
    Merci à toi.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •