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

Python Discussion :

Du Python vers C


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Par défaut Du Python vers C
    Bonjour,

    D'après ma connaissance, je pense on peut passer de Python vers C (sous Windows). Pour cela, est ce que pouvez vous m'indiquer un lien ou un livre qui me montre cette démarche d'une façon claire et étape par étape. C'est quoi la plus simple méthode ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    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 : 4 060
    Par défaut
    Tu veux dire faire de l'interfaçage python/C ?

    Si oui tu as deux solutions complexes et une autre plus complexe

    Solution complexe -> cython
    Solution complexe -> ctypes
    Solution plus complexe -> API C

    Bon courage !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nantesbaalbeck Voir le message
    Bonjour,

    D'après ma connaissance, je pense on peut passer de Python vers C (sous Windows). Pour cela, est ce que pouvez vous m'indiquer un lien ou un livre qui me montre cette démarche d'une façon claire et étape par étape. C'est quoi la plus simple méthode ?

    Merci d'avance.
    Bonjour,

    Cython : http://fr.m.wikipedia.org/wiki/Cython

    Si ça peut aider.

    @+.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Par défaut Cython
    Re,

    J'ai déjà installé Cython avec Python. d'après ce lien http://docs.cython.org/src/reference/compilation.html, il demande que le fichier Python soit sauvegarder avec une extension .pyx ensuite le compiler. ce qui va générer un fichier .C. Le problème que après installation cython je ne trouve pas cython compiler. Est ce que je dois installer d'autre chose ? Merci pour votre aide
    Images attachées Images attachées  

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    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 : 4 060
    Par défaut
    cython s'exécute aussi dans la console Unix... (enfin je l'utilise comme cela)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cython monfichier.pyx
       
    gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2.7 -o monfichier.so monfichier.c
    Après on importe dans un code python, la nouvelle bibliothèque créée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import monfichier
    ...

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Par défaut cython sous windows
    Citation Envoyé par fred1599 Voir le message
    cython s'exécute aussi dans la console Unix... (enfin je l'utilise comme cela)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cython monfichier.pyx
       
    gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2.7 -o monfichier.so monfichier.c
    Après on importe dans un code python, la nouvelle bibliothèque créée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import monfichier
    ...
    Et si on travaille sous Windows ?

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    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 : 4 060
    Par défaut
    Désolé, quand je développe, je travaille exclusivement sur Linux, donc système Unix.

    Je ne peux pas aider sous Windows.

  8. #8
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour compiler sous Windows, on peut utiliser Visual Studio de Microsoft (la version "Express" est gratuite), et, quand on l'a, c'est la version que Cython utilise par défaut.

    On peut aussi utiliser mingw32 (http://www.mingw.org/). Dans ce cas, il faut le dire à Cython: on crée un fichier setup.cfg au même niveau que le setup.py, avec dedans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [build]
    compiler = mingw32
    Dans certains cas, il faut aussi corriger distutils\cygwinccompiler.py en retirant toute mention de l'option ”-mno-cygwin” si on a une erreur à la compilation (genre <l'option ”-mno-cygwin” n'existe pas>).

    A part ça, Cython marche bien. Il s'agit cependant d'une opération complexe qui nécessite de temps en temps des ajustements de code pour que ça marche.

    Pour l'écriture du code destiné à Cython, j'utilise le plus possible les décorateurs (voir la doc) parce que ça permet de ne quasiment pas modifier le code Python "normal": on ajoute simplement les infos nécessaires à la compilation en C, et en particulier tout ce qui concerne les types des variables et le type d'appel/retour des fonctions.

    A noter que Cython peut utiliser le C++ au lieu du C.

    Pour le gain en vitesse d'exécution, on obtient une excellente performance si on utilise les types de variable Python qui ont une correspondance directe avec le C (par exemple: float_Python <=> double_C). On peut aussi utiliser les types de variables spécifiques à Python (list, tuple, dict, set, ...), mais dans ce cas, on obligera le C à faire des appels à l'API Python, et la performance Cython chute. On peut même obtenir des exécutables Cython plus lents que la version Python interprétée (ça m'est arrivé avec les entiers longs Python).

    Cython, en plus de convertir le code Python en C et de le compiler, peut intégrer du code source C, le compiler en même temps et l'intégrer à l'exécutable.

    En résumé, Cython est très bien pour accélérer l'exécution d'un code Python, mais il faut tout de même connaître un minimum de C, en tout cas la logique générale, les types et les déclarations de variables ainsi que les modes d'appels et de retour.

    J'ai fait un petit tuto sur Cython ici: http://python.jpvweb.com/mesrecettes...ple_python_cpp

    A part Cython, on peut, comme l'a dit fred1599, utiliser:

    - ctypes qui permet au code Python d'appeler des fonctions de bibliothèques écrites en C ou C++ (.dll sous Windows). Ça marche, mais il faut bien connaître les formats des variables pour que l'interfaçage fonctionne.

    - il existe aussi une méthode pour créer des fonctions C ou C++ prévues pour être interfacées avec l'API Python (https://docs.python.org/3/extending/). J'ai fait un petit tuto sur le sujet: http://python.jpvweb.com/mesrecettes...ple_python_cpp. Bien que ce soit plus compliqué que ctypes, c'est tout de même plus satisfaisant pour créer des modules Python écrits directement en C ou C++ et importables par le code Python de façon "homologuée" (import...).

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    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 : 4 060
    Par défaut
    Salut Tyrtamos,

    Pas mal ton tuto sur l'API C/C++

  10. #10
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Pas mal ton tuto sur l'API C/C++
    Merci, fred! Venant d'un enseignant, ce compliment me touche.

  11. #11
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut
    J'ai déjà installé cygwin(ou gcc) sous windows .Mais est-ce que Cython est facile à installer ? C'est ce lien qu'il faut utiliser , non ? https://pypi.python.org/pypi/Cython/
    J'aimerais qu'il marche directement avec IDLE python 2.7 , comme ceci, ce bidule pourrait convertir mon code python en C (ces deux langages sont très ressemblants) .

  12. #12
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par Kurodiam Voir le message
    ...Mais est-ce que Cython est facile à installer ? C'est ce lien qu'il faut utiliser , non ? https://pypi.python.org/pypi/Cython/
    J'aimerais qu'il marche directement avec IDLE python 2.7...
    Je ne sais pas sur quel OS tu travailles.
    - Sur linux: installe le paquet s'il est disponible. A défaut, prend Cython sur le lien que tu viens de donner.
    - Sur Windows, il y a un binaire ici: http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython.

  13. #13
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut
    En fait , j'ai un windows 7 . J'ai pu télécharger le dossier zip de cython https://pypi.python.org/pypi/Cython/ et je l'ai extrait aprés dans le bureau mais aprés lorsque je teste avec python 2.7.6 IDLE (comme fred1599 a fait ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> from cython import *
     
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        from cython import *
    ImportError: No module named cython

    Donc impossible aussi d'utiliser ton lien tyrtamos http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython. puisque ce n'est pas exécutable avec Windows 7 (et j'ai essayé comme même )

  14. #14
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Kurodiam Voir le message
    En fait , j'ai un windows 7 . J'ai pu télécharger le dossier zip de cython https://pypi.python.org/pypi/Cython/ et je l'ai extrait aprés dans le bureau...
    Il est plutôt rare qu'une simple extraction d'un zip suffise pour intégrer un nouveau module. Heureusement, on apprend plein de choses intéressantes dans la doc pour installer correctement: http://docs.cython.org/ . Voir: "Installing Cython".

    Citation Envoyé par Kurodiam Voir le message
    Donc impossible aussi d'utiliser ton lien tyrtamos http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython. puisque ce n'est pas exécutable avec Windows 7 (et j'ai essayé comme même )
    Ça, c'est bizarre parce que c'est comme ça que je fais (Windows 7 et Windows 8). Es-tu sûr d'avoir pris la bonne version? Avec Python 2.7 32bits, je prends Cython-0.20.1.win32-py2.7.exe.

  15. #15
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    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 : 4 060
    Par défaut
    Mais est-ce que Cython est facile à installer ?
    C'est pas la bonne question à se poser pour un débutant python...

    La question est: est-ce que cython est facile à utiliser?

    Clairement la réponse est non, apprend python et bosse beaucoup le langage. Ensuite, apprend le C et bosse beaucoup le langage. Puis seulement intervient l'interfaçage python/C/C++ avec cython. Une bonne base des 2, ça se passera bien !

    Dans tous les cas, une fois la maîtrise des deux, l'installation n'est même pas une question que tu te poseras.

  16. #16
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut
    Bon, en utilisant ton lien tyrtamos , j'ai pu maintenant installer ce module "cython" , et j'ai testé le lien http://docs.cython.org/src/quickstart/build.html



    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
    Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> from cython import *
    >>> def say_hello_to(name):
        print("Hello %s!" % name)
     
     
    >>> say_hello_to(name)
    Hello complex!
    >>> from distutils.core import setup
    >>> from Cython.Build import cythonize
    >>> setup(
      name = 'Hello world app',
      ext_modules = cythonize("hello.pyx"),
    )
     
     
    >>> python setup.py build_ext --inplace
    SyntaxError: invalid syntax
    >>> name
    'complex'
    >>> ext_modules
     
    Traceback (most recent call last):
      File "<pyshell#20>", line 1, in <module>
        ext_modules
    NameError: name 'ext_modules' is not defined
    >>> cythonize("hello.pyx")
    []
    >>> ext_modules = cythonize("hello.pyx")
    >>> ext_modules
    []
    >>> name
    'complex'
    >>> print(setup(
      name = 'Hello world app',
      ext_modules = cythonize("hello.pyx"),
    ))
    >>> name
    'complex'

    Là , j'arrive à utiliser juste la fonction double() avec l'importation de cython dans IDLE python :
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> from cython import *
    >>> def f(double x):
        return x**2-x
    SyntaxError: invalid syntax
    >>> def f(double,x):
        return x**2-x
    
    >>> def integrate_f(double a, double b, int N):
        cdef int i
        cdef double s, dx
        s = 0
        dx = (b-a)/N
        for i in range(N):
            s += f(a+i*dx)
        return s * dx
    SyntaxError: invalid syntax
    >>> def integrate_f(double , a, double b, int N):
        cdef int i
        cdef double s, dx
        s = 0
        dx = (b-a)/N
        for i in range(N):
            s += f(a+i*dx)
        return s * dx
    SyntaxError: invalid syntax
    >>> def integrate_f(double , a, double , b, int N):
        cdef int i
        cdef double s, dx
        s = 0
        dx = (b-a)/N
        for i in range(N):
            s += f(a+i*dx)
        return s * dx
    SyntaxError: invalid syntax
    >>> def integrate_f(double , a, double , b, int , N):
        cdef int i
        cdef double s, dx
        s = 0
        dx = (b-a)/N
        for i in range(N):
            s += f(a+i*dx)
        return s * dx
    SyntaxError: invalid syntax
    >>> def integrate_f(double , a, double , b, int , N):
        cdef int , i
        cdef double , s, dx
        s = 0
        dx = (b-a)/N
        for i in range(N):
            s += f(a+i*dx)
        return s * dx
    SyntaxError: invalid syntax
    >>> def integrate_f(double , a, double , b, int , N):
        cdef , int i
        cdef double , s, dx
        s = 0
        dx = (b-a)/N
        for i in range(N):
            s += f(a+i*dx)
        return s * dx
    SyntaxError: invalid syntax
    >>> def integrate_f(double , a, double , b, int , N):
        cdef , int , i
        cdef double , s, dx
        s = 0
        dx = (b-a)/N
        for i in range(N):
            s += f(a+i*dx)
        return s * dx
    SyntaxError: invalid syntax
    >>> def integrate_f(double , a, double , b, int , N):                     # c'est pas du tout juste .
        cdef , int , i
        cdef , double , s, dx
        s = 0
        dx = (b-a)/N
        for i in range(N):
            s += f(a+i*dx)
        return s * dx
    SyntaxError: duplicate argument 'double' in function definition (<pyshell#37>, line 1)
    
    
    >>> f(double,3)                     # ici , c'est le test de la première fonction .
    6
    Par contre , en principe , je dois enregistrer le fichier sous le format .py (avec mon IDLE) , et pouvoir importer cette fonction dans une nouvelle session c-a-d from hello import say_hello_to (mais c'est bien un module ) .J'ai du rater une étape importante , non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> from hello import say_hello_to
     
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        from hello import say_hello_to
    ImportError: No module named hello
    >>>

Discussions similaires

  1. Python vers PHP - utilisation hors ligne
    Par Jiyuu dans le forum Langage
    Réponses: 14
    Dernier message: 27/08/2009, 16h45
  2. Traduction de Python vers PhP
    Par rambc dans le forum Général Python
    Réponses: 0
    Dernier message: 08/06/2009, 19h47
  3. probleme pour le transfert dune array de Python vers C
    Par jyjeanphi dans le forum Interfaçage autre langage
    Réponses: 3
    Dernier message: 31/03/2009, 23h54
  4. import des donnees python vers tableau
    Par tsicc dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 02/04/2008, 10h10
  5. Python vers C/C++ : listage des Cnp et Anp
    Par samW7 dans le forum Général Python
    Réponses: 2
    Dernier message: 05/12/2005, 21h38

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