Est-il possible d'exécuter un script python (pas un module) à partir d'ipython sans indiquer son chemin? J'ai essayé de définir PYTHONPATH mais cela semble ne fonctionner que pour les modules. Je voudrais exécuter
%run my_script.py
sans être dans le répertoire contenant le fichier.
import <module>
est essentiellement le même queexec(<moduleSource>)
dans JavaScript ou Perl.Réponses:
à partir du répertoire de "my_script.py", vous pouvez simplement faire:
la source
SyntaxError: invalid syntax
ici, sur la console Python . Python 3.5.3 sur Debian 9. Cependant, fonctionne sur IPython.%run
c'est une commande magique ipython, qui ne fait pas partie du langage Python lui-même.Comment exécuter un script en Ipython
Ça devrait le faire
la source
La
%run
magie a un paramètrefile_finder
qu'elle utilise pour obtenir le chemin complet du fichier à exécuter (voir ici ); comme vous le notez, il regarde simplement dans le répertoire courant, en ajoutant ".py" si nécessaire.Il ne semble pas y avoir de moyen de spécifier quel chercheur de fichiers utiliser à partir de la
%run
magie, mais rien ne vous empêche de définir votre propre commande magique qui appelle%run
avec un chercheur de fichiers approprié.En tant que hack très méchant, vous pouvez remplacer la valeur
file_finder
par défaut par la vôtre:Pour être honnête, au rythme de l'évolution de l'API IPython, il est tout aussi probable que la définition de votre propre magie continue de fonctionner.
la source
En python, il n'y a aucune différence entre les modules et les scripts; Vous pouvez exécuter à la fois des scripts et des modules. Le fichier doit être sur le pythonpath AFAIK car python doit pouvoir trouver le fichier en question. Si python est exécuté à partir d'un répertoire, le répertoire est automatiquement ajouté au pythonpath.
Reportez-vous à Quelle est la meilleure façon d'appeler un script Python à partir d'un autre script Python? pour plus d'informations sur les modules et les scripts
Il existe également une fonction intégrée execfile (nom de fichier) qui fera ce que vous voulez
la source
__name__
== '__main__
':" à la finpour Python 3.6.5
la source
runfile()
une commande deipython
? Ça ne marche pas pour moi.