Je veux importer foo-bar.py. Cela marche:
foobar = __import__("foo-bar")
Cela ne:
from "foo-bar" import *
Ma question: est-il possible que je puisse utiliser le format ci-dessus, c'est- from "foo-bar" import *
à- dire importer un module qui contient un module -
?
Réponses:
tu ne peux pas.
foo-bar
n'est pas un identifiant. renommer le fichier enfoo_bar.py
Edit: Si ce
import
n'est pas votre objectif (comme dans: vous ne vous souciez pas de ce qui se passe avecsys.modules
, vous n'en avez pas besoin pour importer lui-même), il suffit d'obtenir tous les globaux du fichier dans votre propre portée, vous pouvez utiliserexecfile
la source
execfile(fn)
utilisationexec(open(fn).read())
Il existe également le package importlib.Si vous ne pouvez pas renommer le module pour qu'il corresponde aux conventions de dénomination Python, créez un nouveau module qui servira d'intermédiaire:
la source
foo_proxy.py
fichier, affecter la sortie de__import__(...)
àsys.modules['foo_proxy']
. En fait, ne faites pas ça, c'est une idée terrible.À partir de Python 3.1, vous pouvez utiliser importlib:
( https://docs.python.org/3/library/importlib.html )
la source
Si vous ne pouvez pas renommer le fichier d'origine, vous pouvez également utiliser un lien symbolique:
Ensuite, vous pouvez simplement:
la source
Comme d'autres l'ont dit, vous ne pouvez pas utiliser le "-" dans la dénomination python, il existe de nombreuses solutions de contournement, une telle solution de contournement qui serait utile si vous deviez ajouter plusieurs modules à partir d'un chemin utilise
sys.path
Par exemple, si votre structure est comme ceci:
la source