Comment importer un module lorsque le nom du module comporte un tiret ou un trait d'Union' -'?
je veux importer foo-bar.py. Cela fonctionne:
foobar = __import__("foo-bar")
ce qui n'est pas:
from "foo-bar" import *
ma question: Puis-je utiliser le format ci-dessus, c'est-à-dire from "foo-bar" import *
pour importer un module qui contient un -
?
3 réponses
vous ne pouvez pas. foo-bar
n'est pas un identificateur. renommer le fichier en foo_bar.py
Edit: Si import
n'est pas votre objectif (comme dans: vous ne vous souciez pas ce qui se passe avec sys.modules
, vous n'avez pas besoin d'importer lui-même), juste obtenir tous les fichier globals dans votre propre champ d'application, vous pouvez utiliser execfile
# contents of foo-bar.py
baz = 'quux'
>>> execfile('foo-bar.py')
>>> baz
'quux'
>>>
si vous ne pouvez pas renommer le module pour qu'il corresponde aux conventions de nommage Python, créez un nouveau module pour agir comme 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 original, vous pouvez également utiliser un lien symbolique:
ln -s foo-bar.py foo_bar.py
alors vous pouvez juste:
from foo_bar import *