Comment arrêter Python de searchr des files .py

J'ai un système avec très peu de ressources (embedded). A cause de cela, j'ai seulement installé les files python .pyo (= byte compilé et optimisé) pour mon programme. Maintenant, quand un tel programme s'exécute, python search toujours les files .py (probablement pour voir si le .pyo doit être mis à jour). Le plus drôle, c'est que ça fait beaucoup: 25000 appels stat64 () et 8304 appels getcwd ()) en 5 minutes!

getcwd("/tmp", 1026) = 9 getcwd("/tmp", 1026) = 9 stat64("MyProgram.py", 0xbeb94b0c) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/python2.5/MyProgram.py", 0xbeb94b0c) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/python25.zip/MyProgram.py", 0xbeb94b0c) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/python2.5/MyProgram.py", 0xbeb94b0c) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/python2.5/plat-linux2/MyProgram.py", 0xbeb94b0c) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/python2.5/lib-tk/MyProgram.py", 0xbeb94b0c) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/python2.5/lib-dynload/MyProgram.py", 0xbeb94b0c) = -1 ENOENT (No such file or directory) stat64("MyProgram.py", 0xbeb94cc8) = -1 ENOENT (No such file or directory) getcwd("/tmp", 1026) = 9 stat64("MyProgram.py", 0xbeb94bc4) = -1 ENOENT (No such file or directory) 

Comment puis-je empêcher Python de faire cela?

Vous pouvez essayer de replace la fonction __builtins__.__import__ (qui est appelée par des déclarations d'import) avec votre propre code. Vous pouvez utiliser la fonction imp.load_module pour charger le file py / pyc / pyo.

Voici une version très simple de celui-ci:

 import sys import imp real_import = __builtins__.__import__ def pyc_only_import(name, globals = globals(), locals = locals(), fromlist = [], level = 0): pycname = name + ".pyc" modfile = open(pycname) return imp.load_module(name, modfile, pycname, (".pyc", "rb", 2)) __builtins__.__import__ = pyc_only_import import hello 

Ceci est loin d'une implémentation complète de __import__ mais cela fonctionne s'il y a un file hello.pyc dans le directory de travail courant.