Comment importer un module lorsque le nom du module comporte un tiret ou un trait d’union ‘-‘?

Je veux importer foo-bar.py. Cela marche:

foobar = __import__("foo-bar") 

Cela ne veut pas:

 from "foo-bar" import * 

Ma question: est-ce que je peux utiliser le format ci-dessus, c’est-à-dire à from "foo-bar" import * pour importer un module qui a un - dedans?

tu ne peux pas. foo-bar n’est pas un identifiant. renommez le fichier en foo_bar.py

Edit: Si l’ import n’est pas votre objective (comme dans: vous ne vous souciez pas de ce qui se passe avec sys.modules , vous n’avez pas besoin de l’importer), vous pouvez simplement utiliser tous les globaux du fichier dans votre propre scope. 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 dénomination Python, créez un nouveau module pour agir 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 

Alors vous pouvez juste:

 from foo_bar import *