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 - ?

103
demandé sur martineau 2011-12-02 05:56:49

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'
>>> 
75
répondu SingleNegationElimination 2011-12-02 13:56:06

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 * 
75
répondu Raymond Hettinger 2011-12-02 02:09:36

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 *
36
répondu gitaarik 2014-01-09 16:14:09