Il semble qu’ils ont annulé dans Python 3.0 tous un moyen facile de charger rapidement un fichier de script - execfile() tant reload().
Y a-t-il une alternative évidente, je suis absent ?
Il semble qu’ils ont annulé dans Python 3.0 tous un moyen facile de charger rapidement un fichier de script - execfile() tant reload().
Y a-t-il une alternative évidente, je suis absent ?
Vous êtes seulement censés lire le fichier et exec le code vous-même. 2to3 actuelle remplace
execfile("somefile.py", global_vars, local_vars)
comme
with open("somefile.py") as f:
code = compile(f.read(), "somefile.py", 'exec')
exec(code, global_vars, local_vars)
(La compilation d'appel n'est pas strictement nécessaire, mais il associe le nom de fichier avec le code objet qui fait du débogage d'un peu plus facile.)
Voir:
Comme suggéré sur le python-dev mailinglist récemment, le runpy module pourrait être une alternative viable. En citant ce message:
https://docs.python.org/3/library/runpy.html#runpy.run_path
import runpy file_globals = runpy.run_path("file.py")
Il y a de subtiles différences d' execfile
:
run_path
toujours crée un nouvel espace de noms. Il exécute le code dans un module, donc il n'y a pas de différence entre les variables globales et locales (c'est pourquoi il y a seulement un init_globals
argument). Les variables globales sont retournés.
execfile
exécuté dans l'espace de noms courant ou de l'espace de noms donné. La sémantique de l' locals
et globals
, si elle est donnée, étaient similaires aux sections locales et variables globales à l'intérieur d'une définition de classe.
run_path
ne peut pas seulement d'exécuter des fichiers, mais aussi les œufs et les répertoires (reportez-vous à sa documentation pour plus de détails).
Si le script que vous voulez charger dans le même répertoire que celui que vous exécutez, peut-être "importer" va faire le travail ?
Si vous avez besoin d'importer dynamiquement le code de la fonction intégrée __ import__ et le module imp sont à la peine de regarder.
>>> import sys
>>> sys.path = ['/path/to/script'] + sys.path
>>> __import__('test')
<module 'test' from '/path/to/script/test.pyc'>
>>> __import__('test').run()
'Hello world!'
test.py:
def run():
return "Hello world!"
Si vous êtes à l'aide de Python 3.1 ou version ultérieure, vous devriez également prendre un coup d'oeil à importlib.
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.