2011-09-28 6 views
45

Tengo un módulo de Python existente con un guión en su nombre, foo-bar.pymódulo Python con un guión o un guión (-) en su nombre

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

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

(Entiendo que esta no es una buena práctica. Pero para esta situación, preferiría no rediseñar y probar un conjunto de aplicaciones mucho más grande. Tampoco creo que mis maestros corporativos aprobarían mi toma el momento de implementar dicho cambio.)

+5

No se puede hacer un hallazgo-en-archivos en su IDE y reemplazar todos los 'foo-bar's con 'foobar' o lo que sea? ¿Qué tan difícil es eso? – agf

+2

http://stackoverflow.com/questions/761519/is-it-ok-to-use-dashes-in-python-files-when-trying-to-import-them – BenH

+2

Esta respuesta en particular: http: // stackoverflow.com/questions/761519/is-it-ok-to-use-dashes-in-python-files-when-trying-to-import-them/762693#762693 – BenH

Respuesta

64

Puede hacerlo utilizando __import__(). Por ejemplo:

foobar = __import__("foo-bar") 

Pero en realidad debería cambiar el nombre del módulo. De esta forma, puede evitar confusiones cuando el nombre del archivo del módulo es diferente del identificador utilizado en el programa.

+3

Gracias. Entiendo que se deben seguir las convenciones siempre que sea práctico. Trataré este tema específico durante una revisión del código departamental. –

+13

¿Cómo funcionaría la importación de un submódulo con este enfoque? – Fydo

25

Sé que esta pregunta ya ha sido respondida a satisfacción del solicitante, pero esta es otra respuesta que creo que tiene algún mérito anterior usando __import__().

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

De acuerdo con 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 + solamente

+2

Estaba buscando cómo hacer esto y su respuesta se aplica mejor a mi situación que la respuesta anterior. Siempre es bueno si ve una respuesta distinta a la ya existente para agregarla como una nueva respuesta, de modo que las personas en una posición como yo podamos encontrar toda la información relevante en un solo lugar. –

Cuestiones relacionadas