Puis-je faire fonctionner le python interprète sans générer les fichiers compilés .pyc ?
Réponses
Trop de publicités?À partir de "Ce qui est Nouveau dans la version 2.6 de Python - Interprète Changements":
Python peut maintenant être empêché de l'écriture .pyc ou .pyo fichiers par la fourniture de l' -B commutateur de Python interprète, ou par la définition de la PYTHONDONTWRITEBYTECODEenvironnement variable avant l'exécution de l' interprète. Ce paramètre est disponible pour Python programmes de l'
sys.dont_write_bytecode
variable, et Le code Python pouvez modifier la valeur de modifier l'interprète son comportement.
Mise à jour 2010-11-27: Python 3.2 traite de la question d'encombrer les dossiers de la source avec .pyc
fichiers par l'introduction d'un spécial __pycache__
sous-dossier, voir nouveautés de Python 3.2 - PYC Répertoires de Dépôt.
En fait il y a un moyen de le faire en Python 2.3+, mais c'est un peu ésotérique. Je ne sais pas si vous vous en rendez compte, mais vous pouvez effectuer les opérations suivantes:
$ unzip -l /tmp/example.zip
Archive: /tmp/example.zip
Length Date Time Name
-------- ---- ---- ----
8467 11-26-02 22:30 jwzthreading.py
-------- -------
8467 1 file
$ ./python
Python 2.3 (#1, Aug 1 2003, 19:54:32)
>>> import sys
>>> sys.path.insert(0, '/tmp/example.zip') # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'/tmp/example.zip/jwzthreading.py'
Selon le zipimport de la bibliothèque:
Tous les fichiers peuvent être présents dans l'archive ZIP, mais uniquement les fichiers .py et .py[co] sont disponibles pour l'importation. ZIP à l'importation de modules dynamiques (.pyd, .donc) n'est pas autorisé. Notez que si une archive contient uniquement .py fichiers, Python ne tente pas de modifier l'archive en ajoutant le correspondant .pyc ou .pyo fichier, ce qui signifie que si une archive ZIP ne contient pas .pyc fichiers, l'importation peut être assez lent.
Donc, tout ce que vous avez à faire est de compresser les fichiers, ajoutez la zipfile à votre sys.chemin d'accès, puis de les importer.
Si vous êtes à la construction de ce sous UNIX, vous pouvez également envisager l'emballage de votre script à l'aide de cette recette: unix zip exécutable, mais notez que vous pourriez avoir à modifier si vous prévoyez sur l'utilisation de stdin ou lire quoi que ce soit à partir de sys.args (il PEUT être fait sans trop de problèmes).
Dans mon expérience, la performance n'a pas trop souffert à cause de cela, mais vous devez réfléchir à deux fois avant de l'importation des très gros modules de cette façon.
2.5, theres aucun moyen de le supprimer, autres que des mesures comme de ne pas donner aux utilisateurs l’accès en écriture au répertoire.
En python 2.6 et 3.0 cependant, il peut y avoir un réglage dans le module sys appelé « dont_write_bytecode » qui peut être configuré pour supprimer cela. Cela peut également être défini en passant la «-B » option ou en définissant la variable d’environnement « PYTHONDONTWRITEBYTECODE »
Autant que je sache python compile tous les modules vous « importez ». Cependant python ne compilera pas un script python en utilisant : « python script.py » (il sera cependant compile tous les modules qui le script importe).
Les vraies questions est pourquoi vous ne voulez pas python pour compiler les modules ? Vous pouvez automatiser sans doute un moyen de nettoyer ces si ils obtiennent de la manière.