Dois-je dois supprimer tous les espaces du nom de fichier pour l'importer, ou existe-t-il un moyen de dire à import
qu'il y a des espaces?
Vous devez supprimer les espaces du nom de fichier. Parce que le nom de fichier est utilisé comme identifiant pour les modules importés (c'est-à-dire foo.py
sera importé en tant que foo
) et Python ne peuvent pas avoir d'espaces, cela n'est pas pris en charge par l'instruction import
.
Si vous vraiment devez le faire pour une raison quelconque, vous pouvez utiliser le __import__
fonction:
foo_bar = __import__("foo bar")
Cela importera foo bar.py
comme foo_bar
. Cela se comporte un peu différemment de l'instruction import
et vous devez l'éviter.
Si vous voulez faire quelque chose comme from foo_bar import *
(mais avec un espace au lieu d'un trait de soulignement), vous pouvez utiliser execfile (docs ici ):
execfile("foo bar.py")
bien qu'il soit préférable d'éviter les espaces dans les noms de fichiers source.
Vous pouvez aussi utiliser importlib.import_module
, qui est un wrapper autour de __import__
.
foo_bar_mod = importlib.import_module("foo bar")
ou
foo_bar_mod = importlib.import_module("path.to.foo bar")
Plus d'informations: https://docs.python.org/2/library/importlib.html
Juste pour ajouter à la réponse de Banks, si vous importez un autre fichier que vous n'avez pas enregistré dans l'un des répertoires Python vérifie l'importation de répertoires, vous devez ajouter le répertoire à votre chemin avec
import sys
sys.path.append("absolute/filepath/of/parent/directory/of/foo/bar")
avant d'appeler
foo_bar = __import__("foo bar")
ou
foo_bar = importlib.import_module("foo bar")
C'est quelque chose que vous n'avez pas à faire si vous l'importiez avec import <module>
, où Python vérifiera le répertoire courant du module. Si vous importez un module du même répertoire, par exemple, utilisez
import os,sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
foo_bar = __import__('foo_bar')
J'espère que cela permettra à quelqu'un d'autre d'essayer d'importer son propre fichier au nom étrange ou un fichier Python qu'il a téléchargé manuellement quelque temps :)