begin process at 2012 05 26 04:28:30
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Tutoriaux

 > CONVERTIR UN CODE PYTHON EN C++ PUIS LE COMPILER

CONVERTIR UN CODE PYTHON EN C++ PUIS LE COMPILER


 Information sur le tutoriel

Note :
Aucune note

 Description

Qui n'a pas un jour rêver de profiter de la syntaxe claire et simple de python et de la vitesse du C++.
Avec shedskin, c'est possible, ce programme convertit votre code python en code C++.

Tutorial

Convertir un code python en C++ puis le compiler.


Voilà une super bonne nouvelle pour la communauté des utilisateurs de python, un espoir de compilation grâce au formidable travail de l’équipe de shedskin.


Grâce à ce petit programme vous pourrez convertir vos codes python en C++ puis les compiler et augmenter les performances de 20 à plus de 200*


Limitations :

Supporte les versions python de 2.4 à 2.6

Ne supporte pas le typage dynamique (Un variable int doit rester int par exemple)


Il supporte ces librairies seulement mais il est possible de compiler une librairie ou ses propres librairies, moyennant adaptation du code.

  • bisect
  • collections
  • ConfigParser
  • copy
  • datetime
  • fnmatch
  • getopt
  • glob
  • math
  • os (il manque certaines fonctions sous Windows)
  • os.path
  • random
  • re
  • socket
  • string
  • sys
  • time


Plus précis, voir en bas de ce tutoriel un extrait de la documentation officielle (en)


Tout d’abord télécharger la dernière release de shedskin :

http://sourceforge.net/projects/shedskin/files/


Exécuter le programme d’auto extraction choisissez le dossier où extraire shedskin.


Allez dans le répertoire d’extraction ouvrez le bat nommé init.bat.


Une fenêtre dos s’ouvre.


Placez votre fichier python .py dans le dossier d’en dessous nommé shedskin.


Pour convertir py -> C++ tapez dans la commande : shedskin monpy.py (exemple).

Shedskin doit bien être marqué dans la console !

La conversion débute et vous indique si votre code ne comporte pas d’erreurs.


Un fichier monpy.cpp, un monpy.hpp et un pythot.ss.py viennent d’êtres créés, ils serviront à la compilation.


Compiler son code :

Maintenant tapez juste après avoir converti votre code : make run , Tout simplement.

La compilation est en cours puis le programme se lance.

Tapez seulement make pour seulement compiler.


Voilà c’est compilé, votre exe se trouve dans le répertoire shedskin : shedskin-0.2\shedskin.

Il nécessite libpcre-0.dll et gc.dll.


Shed Skin translates pure, but implicitly statically typed, Python programs into C++. The static typing restriction means that variables can only ever have a single, static type. So, for example,

a = 1

a = ’1’ # bad

is not allowed. However, as in C++, types can be abstract, so that, for example,

a = A()

a = B() # good

where A and B have a common base class, is allowed.

The typing restriction also means that the elements of some collection (list, set, etc.) cannot have different types (because their subtype must also be static). Thus:

a = [’apple’, ’b’, ’c’] # good

b = (1, 2, 3) # good

c = [[10.3, -2.0], [1.5, 2.3], []] # good

are allowed, but

d = [1, 2.5, ’abc’] # bad

e = [3, [1, 2]] # bad

f = (0, ’abc’, [1, 2, 3]) # bad

are not allowed. Of course, dictionary keys and values may be of different types:

g = {’a’: 1, ’b’: 2, ’c’: 3} # good

h = {’a’: 1, ’b’: ’hello’, ’c’: [1, 2, 3]} # bad

In the current version of Shed Skin, mixed types are also permitted in tuples of length two:

a = (1, [1]) # good

In the future, mixed tuples up to a certain length will be allowed.

None may only be mixed with non-scalar types (i.e., not with int or float):

l = [1]

l = None # good


m = 1

m = None # bad


def fun(x = None): # bad: use a special value for x here, e.g. x = -1

pass

fun(1)

Integers and floats can often be mixed, but it is better to avoid this where possible, as it may confuse Shed Skin:

a = [1.0]

a = [1] # wrong - use a float here, too

Shed Skin will only ever support a subset of all Python features. The following common features are currently not supported:

  • reflection (getattr, hasattr), eval, or other really dynamic stuff
  • arbitrary-size arithmetic (integers become 32-bit on most architectures!)
  • generator expressions
  • variable numbers of arguments and keyword arguments
  • multiple inheritance
  • nested functions and classes
  • inheritance from builtins (excluding Exception and object)
  • some builtins, such as map, filter and reduce
  • overloading __iter__ and __call__

Some other features are currently only partially supported:

  • class attributes must always be accessed using a class identifier:
  • self.class_attr # bad
  • SomeClass.class_attr # good
  • anonymous function passing works reasonably well, but not for methods, and they cannot be contained:
  • var = lambda x, y: x+y # good
  • var = some_func # good
  • var = self.some_method # bad
  • [var] # bad

 Historique

05 janvier 2010 01:21:57 :
Ajout de la présentation.
05 janvier 2010 01:22:08 :
Ajout de la présentation.
05 janvier 2010 01:22:21 :
Ajout de la présentation.

Commentaires

Commentaire de xeolin le 06/01/2010 11:39:08

Très bon tutoriel !
Donc tout ce qui est interface graphique (Tkinter) ne fonctionnera pas?
Il y a-t-il une grosse différence en du python avec psyco et une fois compilé ?
Le code est-il lisible et modifiable une fois en C++ ?
Peut-on utiliser un autre compilateur que celui fournit (g++) (je pense à MVB2009 + opencl/cuda) ?
Peut-on l'utiliser pour faire du "on the fly" ?

Commentaire de Clempython le 06/01/2010 17:20:59

Les tutoriels ça me connaît :)
Il faudra soit tout recompiler et adapter le code, les dévellopeurs vont sûrement les intégrer mais il faudra être patient, c'est vrai que l'abscence de tkinter va poser problème...
psyco de *1.5 à *4
shedskin de *4 à *200
après il faut se débrouiller pour optimiser son code pour la conversion.
Par contre le C++ nettement moins, en regardant les codes convertis je peux te dire que le code est bien du C++ normal mais avec beaucoup de fonctions codés pour l'occasion, les variables changent de nom ce qui rends un peu moins lisible.
si un même code C++ est compilable par g++ et par un autre, alors c'est sûrement possible en compilant manuellement.

"on the fly" ?

Commentaire de xeolin le 06/01/2010 18:35:07

Merci pour tes réponses rapides, par "on the fly", je voulais dire "à la volée".
L'idée est que la compilation du code se face au lancement du script, pour garder la partie "langage interprété" tout en ayant les perfs...

Enfin je vais essayer la compilation ^^

Merci beaucoup, ça m'évitera, lorsque je distribue mon code, de donner un fichier de 10mo à cause que py2exe est si.. inefficace

Commentaire de Clempython le 06/01/2010 20:02:22

Pour la compilation à la volée ça risque d'être dur en ligne de commande mais j'essaye de faire une interface avec Softwarezator pour piloter shedskin, en gros on mettra le texte par copier coller ou ouverture dans un fichier puis clic puis et ça compile.

Commentaire de xeolin le 06/01/2010 21:24:57

Je serai interessé par la source du script que tu essayes de faire ^^

Commentaire de saigneurdushi le 04/01/2011 05:56:19

C'est big power ce projet :-)

Commentaire de belzibute le 06/11/2011 21:54:31

Bonsoir, j'ai voulu utilisé ce petit programme très interessant pour la conversion de python en c++, mais je bloque dès le départ, après avoir lancé le fichier init.bat, j'ai tapé ma ligne de commande pour la conversion et j'ai eu un message d'erreur qui me dit: 'python' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commande.
D'après le tuto il me semble que cela été fait sur un Windows XP, je suis en Windows Seven x86, donc ma question est: est ce que ce petit programme est compatible Windows 7.
Merci

Commentaire de xeolin le 07/11/2011 02:27:40

edite le fichier batch et remplace "python" par "c:/Python27/python.exe" en faite remplace par un pointer vers ton exécutable python.
Si tu veux bien faire les choses, rajoute le dossier dans la variable d'environment PATH.

Commentaire de belzibute le 07/11/2011 20:13:55

Bonsoir, je te remercie Xeolin, je m'attendais pas à avoir une réponse aussi rapide. Je vais tester cela dans la soirée si je peux et te tiens au courant. Merci encore.

Commentaire de belzibute le 08/11/2011 19:56:56

Bonsoir, donc effectivement cela a marché, mais j'ai eu des messages d'erreur:

Traceback (most recent call last):
  File "C:\shedskin-0.0.28\shedskin\ss.py", line 459, in <module>
    main()
  File "C:\shedskin-0.0.28\shedskin\ss.py", line 454, in main
    analysis(name)
  File "C:\shedskin-0.0.28\shedskin\ss.py", line 63, in analysis
    gx.main_module = parse_module(gx.main_mod, ast)
  File "C:\shedskin-0.0.28\shedskin\graph.py", line 1478, in parse_module
    mv.dispatch(mod.ast)
  File "C:\shedskin-0.0.28\shedskin\graph.py", line 42, in dispatch
    ASTVisitor.dispatch(self, node, *args)
  File "C:\python27\lib\compiler\visitor.py", line 57, in dispatch
    return meth(node, *args)
  File "C:\shedskin-0.0.28\shedskin\graph.py", line 237, in visitModule
    else: n = From('builtin', [('*', None)])
TypeError: __init__() takes at least 4 arguments (3 given)

Mais a mon avis je dois utiliser des bibli qui ne sont pas pris en charge. Pas grave, peut être pour un prochain code, en tout cas si cela marche pour certain, très bon petit prog et bon tuto.

Commentaire de xeolin le 08/11/2011 20:21:45

Je pense que tu as Python 3.x.x
utilise python 2.7.x

Commentaire de belzibute le 09/11/2011 00:46:17

non, non j'ai bien python 2.7, j'ai pensé a cela aussi car le tuto dit jusqu'a 2.6 mais quand tu m'as indiqué, le chemin tu avais mis 2.7, donc j'ai supposé que tu avais 2.7 aussi.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales