128 votes

Module Python dont le nom contient un tiret ou un trait d'union (-)

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

Je préférerais éviter de changer le nom du module, car il est partagé et je devrais rechercher tous les endroits où il est utilisé pour que mon cas particulier fonctionne.

Existe-t-il un moyen de charger un module dont le nom contient le "-" typiquement interdit ?

(Je comprends que ce n'est pas une bonne pratique. Mais dans cette situation, je préférerais ne pas avoir à reconcevoir et à tester un ensemble beaucoup plus important d'applications. De plus, je ne pense pas que mes supérieurs approuveraient le fait que je prenne le temps de mettre en œuvre un tel changement).

124voto

DK Bose Points 201

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

foobar = __import__("foo-bar")

Mais vous devriez plutôt renommer le module. Vous éviterez ainsi toute confusion lorsque le nom de fichier du module est différent de l'identifiant utilisé dans le programme.

81voto

NuclearPeon Points 547

Je sais que cette question a déjà reçu une réponse satisfaisante pour l'auteur de la demande, mais voici une autre réponse qui, à mon avis, a un certain mérite par rapport à l'utilisation de l'eau. __import__() .

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

Selon les documents :

"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

0voto

thetrueankev Points 9

Essayez d'utiliser un trait de soulignement au lieu d'un trait d'union.

import pymysql_utils

a fonctionné pour moi même si import pymysql-utils était le nom du module utilisé par pip

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X