296 votes

Comment éviter les fichiers .pyc ?

Puis-je faire fonctionner le python interprète sans générer les fichiers compilés .pyc ?

315voto

Constantin Points 12185

À 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.

126voto

te wilson Points 351
import sys

sys.dont_write_bytecode = True

23voto

Jason Baker Points 56682

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.

11voto

Brian Points 48423

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 »

0voto

Alex Points 45

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X