IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Bibliothèques tierces Python Discussion :

Compiler avec Cython - plusieurs fichiers


Sujet :

Bibliothèques tierces Python

  1. #1
    Candidat au Club
    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 : 3
    Points
    3
    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 éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Pour avoir utilisé cython un moment je te passe le tutoriel avec lequel j'ai appris.

    Pour bien apprendre Python suis ces tutoriels et cours de formation Python : http://python.developpez.com/cours/
    Le meilleur livre Python : Apprendre à programmer avec Python 3 par Gérard Swinnen http://python.developpez.com/cours/apprendre-python3/
    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
    Candidat au Club
    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 : 3
    Points
    3
    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 éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    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
    Candidat au Club
    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 : 3
    Points
    3
    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 averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    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
    Candidat au Club
    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 : 3
    Points
    3
    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 éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    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 averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    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 éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    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 expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    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
    Candidat au Club
    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 : 3
    Points
    3
    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 éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [build]
    compiler = mingw32
    (cependant, ça ne semble pas fonctionner avec pyximport)
    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

  14. #14
    Candidat au Club
    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 : 3
    Points
    3
    Par défaut
    Arg effectivement !
    Merci à toi.

Discussions similaires

  1. Compiler module avec plusieurs fichiers
    Par j0o0 dans le forum Linux
    Réponses: 3
    Dernier message: 12/04/2010, 20h39
  2. [XSD] Validation une instance XML avec schéma(plusieurs fichiers XSD)
    Par ttttnht dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 07/09/2009, 15h16
  3. Compiler un petit programme avec plusieurs fichiers avec g++
    Par Ourcoulouncoulou dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 16/12/2008, 13h48
  4. [Compiler] Compiler une application avec plusieurs fichiers m
    Par ploukinet dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/05/2007, 17h34
  5. compilation projet ( en plusieur fichier )
    Par damien77 dans le forum Code::Blocks
    Réponses: 3
    Dernier message: 21/02/2007, 23h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo