2010-06-01 17 views
12

J'ai un module personnalisé dans l'un des répertoires de mon PYTHONPATH avec le même nom que l'un des modules de bibliothèque standard, de sorte que quand import module_name, ce module est chargé. Si je veux utiliser le module de bibliothèque standard d'origine, est-il possible de forcer Python à importer de la bibliothèque standard plutôt que du répertoire PYTHONPATH, à moins de renommer le module personnalisé et de changer chaque référence pour pointer vers le nouveau nom?Force le module d'importation de la bibliothèque standard Python au lieu de PYTHONPATH par défaut

+0

Quel est le problème de renommer votre module? –

+0

Cela impliquerait simplement de faire des changements à des dizaines de fichiers. Il semble que ce soit la meilleure solution. – jrdioko

+0

Vous avez 'grep', donc il ne devrait pas être trop difficile de les trouver et de les corriger. –

Répondre

11

La solution idéale serait de renommer votre module à quelque chose de pas dans la bibliothèque standard.

Vous pouvez également switch absolute imports on si vous êtes sur Python 2.5+:

from __future__ import absolute_import 
+0

Comment utiliser les importations relatives pour récupérer la version de la bibliothèque standard? – jrdioko

+0

J'ai mal compris votre question, édité la réponse. –

+0

Cela ne va pas vraiment aider? –

5

Vous pouvez sélectionner le module que vous voulez importer avec le module diablotin:

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

Ne pas.

Si vous avez accidentellement choisi un nom de module de bibliothèque standard, modifiez le nom de votre module pour mettre fin au conflit.

+0

C'est probablement la meilleure solution, à la fois pour ne pas causer de confusion lors de la visite des codeurs, et le fait que le comportement important d'un module qui n'était pas déjà importé ne changera pas avec les importations absolues activées. –

-1

La meilleure façon de le faire est de mettre votre projet dans un répertoire, disons « myproject » qui se trouve sur:

/home/me/myproject

Faire un lien symbolique vers myproject répertoire à l'un des les chemins de python par défaut, par exemple:

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

maintenant, quand vous voulez pour importer un module dans votre projet, ouvrez simplement un interpréteur python.

>>> from myproject.mymodule import *

Il fonctionnera comme un charme. Une dernière chose, ne nommez pas votre projet de la même manière que ceux trouvés dans le chemin python, donc vous n'aurez pas de problèmes lors de l'importation.

+0

Une meilleure façon serait d'utiliser 'PYTHONPATH'. N'utilisez pas non plus 'from x import * 'car cela désoriente les outils d'analyse statique et rend plus difficile la compréhension de l'origine d'une variable. – bfontaine