2010-06-01 16 views
12

Tengo un módulo personalizado en uno de los directorios de mi PYTHONPATH con el mismo nombre que uno de los módulos de biblioteca estándar, de modo que cuando I import module_name, ese módulo se carga. Si quiero usar el módulo de biblioteca estándar original, ¿hay alguna manera de forzar a Python a importar desde la biblioteca estándar en lugar de hacerlo desde el directorio PYTHONPATH, sin renombrar el módulo personalizado y cambiar cada referencia para apuntar al nuevo nombre?Forzar módulo de importación desde la biblioteca estándar de Python en lugar de PYTHONPATH predeterminado

+0

¿Qué tiene de malo renombrar su módulo? –

+0

Simplemente implicaría realizar cambios en docenas de archivos. Aunque parece que es la mejor solución. – jrdioko

+0

Tiene 'grep', por lo que no debería ser demasiado difícil encontrarlos y arreglarlos. –

Respuesta

11

La solución ideal sería la de cambiar el nombre del módulo para algo no en la biblioteca estándar.

Puede también switch absolute imports on si estás en Python 2.5+:

from __future__ import absolute_import 
+0

¿Cómo usaría importaciones relativas para obtener la versión de biblioteca estándar? – jrdioko

+0

He entendido mal tu pregunta, respuesta editada. –

+0

Esto no ayudará? –

5

Puede seleccionar el módulo que desea importar con el módulo imp:

import imp 
mymodule = imp.load_module(name, file, pathname, description) 
9

No.

Si accidentalmente ha elegido un nombre de módulo de biblioteca estándar, cambie el nombre de su módulo para terminar el conflicto.

+0

Esta es probablemente la mejor solución, tanto para no causar confusión en los programadores visitantes, y el hecho de que el comportamiento que importa un módulo que no era ya una importación relativa no cambiará con las importaciones absolutas activadas. –

-1

La mejor manera de hacerlo es poner su proyecto en un directorio digamos "miproyecto" que reside en:

/home/me/myproject

Hacer un vínculo simbólico a miproyecto directorio a una de los caminos pitón por defecto, por ejemplo:

# ln -s /home/me/myproject /usr/local/lib/python2.7/dist-packages/myproject

Ahora cuando se desea para importar un módulo dentro de su proyecto solo abra un intérprete de python.

>>> from myproject.mymodule import *

que va a funcionar como un encanto.

Una última cosa, no nombre su proyecto igual que los encontrados en la ruta python, por lo que no tendrá problemas durante la importación.

+0

Una mejor manera sería usar 'PYTHONPATH'. Tampoco utilice 'from x import *', ya que confunde las herramientas de análisis estático y hace que sea más difícil comprender de dónde viene una variable. – bfontaine

Cuestiones relacionadas