Module Python avec un tiret, ou un trait d'Union (-) dans son nom

J'ai un module Python existant avec un tiret dans son nom, foo-bar.py

Changer le nom du module est quelque chose que je préférerais éviter car le module est partagé, et je devrais chasser tous les endroits où il est utilisé pour que mon cas particulier fonctionne.

Est-il un moyen de charger un module dont le nom contient le généralement interdit '-'?

(Je comprends que ce n'est pas une meilleure pratique. Mais pour cette situation, je préférerais ne pas redessiner et tester un beaucoup plus grand un ensemble d'applications. Aussi, je ne pense pas que mes maîtres d'entreprise approuveraient que je prenne le temps de mettre en œuvre un tel changement.)

54
demandé sur Skip Huffman 2011-09-28 17:01:33

2 réponses

Vous pouvez le faire en utilisant __import__(). Par exemple:

foobar = __import__("foo-bar")

Mais vous devriez vraiment renommer le module à la place. De cette façon, vous pouvez éviter toute confusion où le nom de fichier du module est différent de l'identifiant utilisé dans le programme.

70
répondu nandhp 2011-09-28 13:08:00

Je sais que cette question a déjà été répondue à la satisfaction du demandeur,mais voici une autre réponse qui, selon moi, a un certain mérite en utilisant __import__().

import importlib
mod = importlib.import_module("path.to.my-module")
# mod.yourmethod()

Selon les docs:

"This provides an implementation of import which is portable to any 
Python interpreter. This also provides an implementation which is 
easier to comprehend than one implemented in a programming language 
other than Python."

Python 2.7 + seulement

35
répondu NuclearPeon 2014-07-09 16:45:16