Módulo de Python con un guión o un guión (-) en su nombre


92

Tengo un módulo de Python existente con un guión en su nombre, foo-bar.py

Cambiar el nombre del módulo es algo que preferiría evitar ya que el módulo se comparte, y tendría que buscar todos los lugares donde se usa para que mi caso especial funcione.

¿Hay alguna forma de cargar un módulo cuyo nombre contenga el '-' normalmente prohibido?

(Entiendo que esta no es una práctica recomendada. Pero para esta situación, preferiría no rediseñar y probar un conjunto de aplicaciones mucho más grande. Además, no creo que mis maestros corporativos aprobarían que me tome el tiempo para implementar tal cambio.)


5
¿No puede simplemente hacer una búsqueda en archivos en su IDE y reemplazar todos los foo-barcorreos electrónicos con foobaro lo que sea? ¿Qué tan difícil es eso?
— agf


2
Esta respuesta en particular: stackoverflow.com/questions/761519/…
— BenH

agf Respuesta corta: no es todo mi código.
— Skip Huffman

S.Lott los demás usuarios son aplicaciones comerciales. Por eso sé que es posible.
— Skip Huffman

Respuestas:


98

Puedes hacerlo usando __import__(). Por ejemplo:

foobar = __import__("foo-bar")

Pero realmente debería cambiar el nombre del módulo. De esa manera, puede evitar confusiones cuando el nombre de archivo del módulo es diferente del identificador utilizado en el programa.


4
Gracias. Entiendo que las convenciones deben seguirse siempre que sea práctico. Traeré este tema específico durante una revisión del código departamental.
— Skip Huffman

57

Sé que esta pregunta ya ha sido respondida a satisfacción del autor de la pregunta, pero aquí hay otra respuesta que creo que tiene algún mérito por encima de su uso __import__().

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

Según los documentos:

"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 + solo


5
Estaba buscando cómo hacer esto y su respuesta se aplica mejor a mi situación que la respuesta anterior. Siempre es bueno si ves una respuesta distinta a la que ya existe para agregarla como una nueva respuesta para que las personas en una posición como yo puedan encontrar toda la información relevante en un solo lugar.
— Davy M

0

Intente utilizar un guión bajo en lugar de un guión.

importar pymysql_utils

funcionó para mí a pesar de que import pymysql-utils era el nombre del módulo utilizado por pip

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.