OVH Cloud OVH Cloud

Compilation de Python ?

16 réponses
Avatar
Fuxy
Bonjour,

Je viens de découvrir Python, car je développais en VB et je suis passé sous
Linux, alors je voulais un langage simple

Le python m'a l'air simple, mais peut on compiler un fichier source en
Python ?

Merci

10 réponses

1 2
Avatar
gpg
Le python m'a l'air simple, mais peut on compiler un fichier source en
Python ?


Réponse simple : non. Python est interprété.

Réponse moins simple : oui, mais ce n'est pas utile, sauf dans des cas
exceptionnels.

Avatar
Seb
Fuxy wrote:
Bonjour,

Je viens de découvrir Python, car je développais en VB et je suis
passé sous Linux, alors je voulais un langage simple

Le python m'a l'air simple, mais peut on compiler un fichier source en
Python ?

Merci


Bonjour,

Je ne suis pas un expert mais regardes "py2exe" mais je ne suis pas certain
qu'il fonctionne sous Linux.

Sébastien

Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonjour !

Mais pourquoi vouloir compiler. En faisant cela, on perd beaucoup des
possibilités (aspect dynamique du langage, introspection, adaptabilité,
déboguage pas-à-pas, etc.)


@-salutations
--
Michel Claveau
Avatar
Fred
On Sun, 29 Aug 2004 08:46:41 +0200, "Fuxy" wrote:
Le python m'a l'air simple, mais peut on compiler un fichier source en
Python ?


Je n'ai pas les compétences techniques pour dire, mais j'ai cru
comprendre que la productivité dont tu jouis en développant en Python
(comme le non-typage des données) rend très difficile l'écriture d'un
compilateur en code natif.

De tte façon, les parties critiques de Python sont en fait écrites en
C. Il est donc préférable d'écrire ton programme entièrement en
Python, et, si certaines parties se révelaient trop lentes, les isoler
et les réécrire en C par exemple pour les compiler ds une DLL
appelable de Python.

En revanche, si "compiler" signifie générer un package permettant de
faire tourner ton programme sur une machine sans avoir à préinstaller
Python et autres modules, regarde py2.exe.

http://starship.python.net/crew/theller/py2exe/

Fred.

Avatar
bruno modulix
Le python m'a l'air simple, mais peut on compiler un fichier source en
Python ?



Réponse simple : non. Python est interprété.


Non. Dans l'implémentation standard, les sources sont (automatiquement)
compilées en byte-code avant exécution.


Avatar
bruno modulix
On Sun, 29 Aug 2004 08:46:41 +0200, "Fuxy" wrote:

Le python m'a l'air simple, mais peut on compiler un fichier source en
Python ?



Je n'ai pas les compétences techniques pour dire, mais j'ai cru
comprendre que la productivité dont tu jouis en développant en Python
(comme le non-typage des données)
Les 'données' sont fortement typées en Python. Mais c'est un typage

'dynamique' : les 'variables' sont en fait des symboles 'liés' à des
objets, et ce n'est pas la variable qui est typée, mais l'objet qu'elle
référence.

rend très difficile l'écriture d'un
compilateur en code natif.


Il existe des compilateurs en code natif pour Common Lisp, langage qui
pousse le dynamisme encore plus loin que Python. Je ne pense donc pas
que ce soit un problème technique. Par contre - pour ce que j'en ai
compris -, ça n'améliorerais probablement pas tant que ça les perfs

(snip)


Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !

L'aspect dynamique ne joue pas que sur le typage ; il s'applique aussi au
code (à la structure du programme).


Comment, avec un code compilé, utiliser exec( ou execfile( ?


Comment, avec un compilateur, traiter :

if a==2:
import titi as modul1
else:
import toto as modul1

?





--
Michel Claveau
Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !

Ce n'est pas une véritable compilation, mais plutôt une traduction en un
langage intermédiaire, qui est lui-même interprété, à l'exécution. Une
compilation devrait fournir un fichier nativement exécutable, ce qui n'est
pas le cas avec Python.

En plus, cette traduction n'est pas faite AVANT exécution, mais AU MOMENT de
l'exécution. La preuve en est le résultat des modules, appelés ou non, selon
les circonstances d'exécution, et donc traduits ou non en .pyc ou .pyd

Et puis une interprétation est elle-même une sorte de compilation, bloc par
bloc (autrefois, ligne par ligne).

@-salutations
--
Michel Claveau
Avatar
Richard Delorme

Le python m'a l'air simple, mais peut on compiler un fichier source en
Python ?


Réponse simple : non. Python est interprété.


Non. Dans l'implémentation standard, les sources sont (automatiquement)
compilées en byte-code avant exécution.


Certes, mais le byte-code lui même est interprété dans l'implémentation
courante (il n'y a pas de standard labellisé ISO, AFNOR, DIN, ANSI ou
autre pour Python que je sache). Et c'est cette ultime interprétation
qui est le facteur limitant dans les performances de l'ensemble. Cela
dit, il existe des compilateur JIT pour le byte-code python, comme
psyco, par exemple: http://psyco.sourceforge.net/introduction.html

--
Richard



Avatar
Bruno Desthuilliers
Michel Claveau - abstraction méta-galactique non triviale en fuite
perpétuelle. wrote:
Bonsoir !

Ce n'est pas une véritable compilation, mais plutôt une traduction en un
langage intermédiaire, qui est lui-même interprété, à l'exécution.


Et ?

Que le résultat de la compilation soit un byte-code ou du code natif, il
y a bel et bien compilation. Le processus est techniquement différent de
celui d'un langage strictement interprété, en ce qu'il y a *d'abord*
traduction du langage source en un code binaire de plus bas niveau.

Une
compilation devrait fournir un fichier nativement exécutable,


Si tu va par là, une compilation devrait fournir un fichier objet. C'est
la liaison qui peut produire (entre autres) un fichier exécutable.

ce qui n'est
pas le cas avec Python.



En plus, cette traduction n'est pas faite AVANT exécution, mais AU MOMENT de
l'exécution.
Je maintiens : la compilation à lieu *avant* l'exécution. Mais il n'est

effectivement pas nécessaire de l'effectuer manuellement, l'interpréteur
se chargeant d'appeler le compilateur si nécessaire.

La preuve en est le résultat des modules, appelés ou non, selon
les circonstances d'exécution, et donc traduits ou non en .pyc ou .pyd
Le fait que le byte-code soit ou non sauvé dans un fichier ne change

rien non plus au processus.

Et puis une interprétation est elle-même une sorte de compilation, bloc par
bloc (autrefois, ligne par ligne).
Hem... Si tu veux dire par là que la frontière entre interprétation et

compilation est floue, je suis d'accord, mais je ne suis pas sûr que ta
terminologie soit techniquement correcte !-)

Bruno

1 2