Je veux importer foo-bar.py. Cela marche:
foobar = __import__("foo-bar")
Cela ne veut pas:
from "foo-bar" import *
Ma question: Existe-t-il un moyen d'utiliser le format ci-dessus, à savoir, from "foo-bar" import *
pour importer un module qui a un -
dedans?
vous ne pouvez pas. foo-bar
n'est pas un identifiant. renommez le fichier en foo_bar.py
Edit: Si import
n'est pas votre objectif (comme dans: vous ne vous souciez pas de ce qui se passe avec sys.modules
, vous n’avez pas besoin de l’importer lui-même), vous pouvez utiliser execfile
pour obtenir tous les globaux du fichier dans votre propre
# contents of foo-bar.py
baz = 'quux'
>>> execfile('foo-bar.py')
>>> baz
'quux'
>>>
Si vous ne pouvez pas renommer le module afin qu'il corresponde aux conventions de dénomination Python, créez un nouveau module agissant en tant qu'intermédiaire:
---- foo_proxy.py ----
tmp = __import__('foo-bar')
globals().update(vars(tmp))
---- main.py ----
from foo_proxy import *
Si vous ne pouvez pas renommer le fichier d'origine, vous pouvez également utiliser un lien symbolique:
ln -s foo-bar.py foo_bar.py
Ensuite, vous pouvez simplement:
from foo_bar import *
À partir de Python 3.1, vous pouvez utiliser importlib:
import importlib
foobar = importlib.import_module("foo-bar")
Comme d’autres dit, vous ne pouvez pas utiliser le "-" dans python nommant, il existe de nombreuses solutions de contournement, une solution qui serait utile si vous deviez ajouter plusieurs modules à partir d’un chemin utilise sys.path
Par exemple, si votre structure est comme ceci:
foo-bar
├── barfoo.py
└── __init__.py
import sys
sys.path.append('foo-bar')
import barfoo