Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

.py vers un seul fichier

11 réponses
Avatar
chris
Bonjour,

est il possible de prendre une application python et d'en faire
un seul script avec toutes les dependances de modules sous linux / Unix
en gros faire ce que fais py2exe ?

mais sous forme de script plutot que de binaire ?

En gros j'ai un script python plusieurs modules a moi des modules
standard pour ma version et j'aimerais trouver un utilitaire qui
"compile" tout ca en un seul script

apres il reste a faire python le nouveau script et j'ai un script unique !
me suis je bien fait comprendre ?

A+
chris

10 réponses

1 2
Avatar
NicolasP
Bonjour,

est il possible de prendre une application python et d'en faire
un seul script avec toutes les dependances de modules sous linux / Unix
en gros faire ce que fais py2exe ?

mais sous forme de script plutot que de binaire ?

En gros j'ai un script python plusieurs modules a moi des modules
standard pour ma version et j'aimerais trouver un utilitaire qui
"compile" tout ca en un seul script

apres il reste a faire python le nouveau script et j'ai un script unique !
me suis je bien fait comprendre ?



Je vais peut-être dire une bêtise mais il me semble que ce que tu veux ressemble à un egg.

Nicolas
Avatar
Bruno Desthuilliers
chris a écrit :
Bonjour,

est il possible de prendre une application python et d'en faire
un seul script avec toutes les dependances de modules sous linux / Unix
en gros faire ce que fais py2exe ?

mais sous forme de script plutot que de binaire ?

En gros j'ai un script python plusieurs modules a moi des modules
standard pour ma version et j'aimerais trouver un utilitaire qui
"compile" tout ca en un seul script

apres il reste a faire python le nouveau script et j'ai un script unique !



Qui sera intégralement recompilé à chaque appel... entre autres effets
secondaires indésirables.

Si ton souci est de simplifier la distribution de ton script, tu devrais
peut-être regarder du côté de setuptools/easy_install.
Avatar
chris
NicolasP a écrit :
Bonjour,

est il possible de prendre une application python et d'en faire
un seul script avec toutes les dependances de modules sous linux / Unix
en gros faire ce que fais py2exe ?

mais sous forme de script plutot que de binaire ?

En gros j'ai un script python plusieurs modules a moi des modules
standard pour ma version et j'aimerais trouver un utilitaire qui
"compile" tout ca en un seul script

apres il reste a faire python le nouveau script et j'ai un script
unique !
me suis je bien fait comprendre ?



Je vais peut-être dire une bêtise mais il me semble que ce que tu veux
ressemble à un egg.

Nicolas



Je croyais qu'un egg c'était pour facilité l'installation

la je recherche à créer un pseudo exécutable d'un seul fichier

qui contiennent toutes les librairies/modules dont il a besoin

pour devenir indépendant de l'évolution des modules globaux

A+
merci pour la reponse
Avatar
chris
Bruno Desthuilliers a écrit :
chris a écrit :
Bonjour,

est il possible de prendre une application python et d'en faire
un seul script avec toutes les dependances de modules sous linux / Unix
en gros faire ce que fais py2exe ?

mais sous forme de script plutot que de binaire ?

En gros j'ai un script python plusieurs modules a moi des modules
standard pour ma version et j'aimerais trouver un utilitaire qui
"compile" tout ca en un seul script

apres il reste a faire python le nouveau script et j'ai un script
unique !



Qui sera intégralement recompilé à chaque appel... entre autres effets
secondaires indésirables.

Si ton souci est de simplifier la distribution de ton script, tu devrais
peut-être regarder du côté de setuptools/easy_install.



non c'est plus que cela en fait

Un peu comme GAMBAS le fait il concocte le script + les librairies qu'il
a besoin dans un fichier unique et le rend executable

je voulais juste savoir si cela existait

sinon comme faire autrement que créer un shell qui va lancer python ...

A+
chris

Merci
Avatar
Amaury Forgeot d'Arc
chris a écrit :
Bonjour,

est il possible de prendre une application python et d'en faire
un seul script avec toutes les dependances de modules sous linux / Unix
en gros faire ce que fais py2exe ?

mais sous forme de script plutot que de binaire ?

En gros j'ai un script python plusieurs modules a moi des modules
standard pour ma version et j'aimerais trouver un utilitaire qui
"compile" tout ca en un seul script

apres il reste a faire python le nouveau script et j'ai un script unique !
me suis je bien fait comprendre ?



C'est possible, en faisant à peu près comme py2exe, puis un loader de
packages. Tout en bas, voici un essai d'implémentation rapide, très très
incomplet, mais qui marche sur au moins un exemple.

Comment il marche:
- on part du module principal
- on utilise ModuleFinder pour trouver tous les modules importés
- ces modules sont compilés, le résultat est mis dans un dictionnaire
- puis on écrit un fichier (main.py) qui:
- reconstruit ce dictionnaire
- installe un Loader spécifique, qui intercepte les appels à "import",
et exécute le code compilé du module importé.

Voilà, c'est plus une preuve que ça peut marcher qu'un outil
fonctionnel, mais il peut servir de départ...


--
Amaury


======================================================
import modulefinder
import marshal
import sys

def main(pathname):
finder = modulefinder.ModuleFinder()
finder.run_script(sys.argv[1])
codes = {}
for name in finder.modules:
module = finder.modules[name]
path = module.__file__
print name, module.__path__
if not path:
continue

code = compile(open(path, "rU").read(), path, "exec")
codes[name] = marshal.dumps(code)

out = open("main.py", "w")
out.write("""
import sys, new
import marshal
codes = %r

class MyLoader:
def find_module(self, name, path):
if name in codes:
return self
def load_module(self, fullname):
sys.modules[fullname] = mod = new.module(fullname)
exec(marshal.loads(codes[fullname]), mod.__dict__, mod.__dict__)
return mod

sys.meta_path.append(MyLoader())

# Ré-execute le module '__main__'
mod = new.module('__main__')
exec(marshal.loads(codes['__main__']), mod.__dict__, mod.__dict__)
""" % (codes,))

if __name__ == '__main__':
main(sys.argv[1])
Avatar
Bruno Desthuilliers
chris a écrit :
Bruno Desthuilliers a écrit :
chris a écrit :
Bonjour,

est il possible de prendre une application python et d'en faire
un seul script avec toutes les dependances de modules sous linux / Unix
en gros faire ce que fais py2exe ?

mais sous forme de script plutot que de binaire ?

En gros j'ai un script python plusieurs modules a moi des modules
standard pour ma version et j'aimerais trouver un utilitaire qui
"compile" tout ca en un seul script

apres il reste a faire python le nouveau script et j'ai un script
unique !



Qui sera intégralement recompilé à chaque appel... entre autres effets
secondaires indésirables.

Si ton souci est de simplifier la distribution de ton script, tu
devrais peut-être regarder du côté de setuptools/easy_install.



non c'est plus que cela en fait

Un peu comme GAMBAS le fait il concocte le script + les librairies qu'il
a besoin dans un fichier unique et le rend executable



Excuse-moi si je suis bête, mais quel est l'intérêt de tout coller dans
un fichier unique ?


sinon comme faire autrement que créer un shell qui va lancer python ...



??? Désolé, pas compris la question...
Avatar
kib2
Salut,

J'avais déjà bookmarké quelque chose de semblable il n'y a pas longtemps.
Je viens de retrouver :

http://eli.thegreenplace.net/files/prog_code/libcollect.py.txt

@+,

Kib.
Avatar
chris
> Excuse-moi si je suis bête, mais quel est l'intérêt de tout coller dans
un fichier unique ?




il s'agit tout simplement de ne pas dependre des mises a jours des
librairies/ modules standards
EN fait je jongle avec plusieurs os (AIX / WINDOWS / LINUX) et distrib
linux (UBUNTU/DEBIAN/REDHAT)

et plusieurs versions de python 2.4 / 2.4.2 / 2.5 / 2.5.1 / 2.5.2

avec des chouias de différence entre modules standard mais qui peuvent
planter un script en prod

d'où l'intérêt de figer un script avec ses modules en un ensemble
indépendant

si en plus cela me permet d'éviter les problèmes d'installation liés a
certain modules comme les bases de données par exemple

voila l'intérêt

cf gambas http://gambas.sourceforge.net
mais je trouve plus dans la doc

Merci
A+chris
Avatar
chris
Oulala il me faudra qq jours pour comprendre ;-)

mais cela vaut le coup

merci
A+
chris
Avatar
Bruno Desthuilliers
chris a écrit :
Excuse-moi si je suis bête, mais quel est l'intérêt de tout coller
dans un fichier unique ?




il s'agit tout simplement de ne pas dependre des mises a jours des
librairies/ modules standards



Mmm, ok.

EN fait je jongle avec plusieurs os (AIX / WINDOWS / LINUX) et distrib
linux (UBUNTU/DEBIAN/REDHAT)

et plusieurs versions de python 2.4 / 2.4.2 / 2.5 / 2.5.1 / 2.5.2

avec des chouias de différence entre modules standard mais qui peuvent
planter un script en prod

d'où l'intérêt de figer un script avec ses modules en un ensemble
indépendant



C'est une autre approche, mais ça peut éventuellement t'intéresser:
http://pypi.python.org/pypi/virtualenv
1 2