2009-11-17 3 views
2

J'essaie de travailler sur une bibliothèque Python déjà installée sur mon système (Ubuntu). J'ai vérifié cette bibliothèque, ai édité quelques dossiers, et ai écrit un petit manuscrit pour examiner mes changements. Même si j'ai placé mon script dans le même dossier que celui de la bibliothèque, il semble que Python utilise à la place la version installée (celle de /usr/share/pyshared/...).Création de code Python dans Mon répertoire (pas dans/usr/...)

Ceci est ma structure de répertoire:

src 
+ my_package 
    - my_script.py 
+ library_package 
    - lots_of_code 

Comment puis-je savoir Python d'utiliser le code dans mon répertoire, pas celui installé?

+0

Pour chacune des réponses (correctes) qui vous demandent de modifier 'PYTHONPATH', n'oubliez pas les règles de préséance. Les éléments à gauche dans cette variable prennent le dessus sur les éléments à droite, et les éléments dans le répertoire local pour votre code battent cette variable. –

Répondre

3

Vous pouvez dicter où python recherches pour les modules en utilisant la variable d'environnement PYTHONPATH:

Quand est importé un module de spam nommé, l'interpréteur recherche pour un fichier nommé spam.py dans le répertoire en cours, puis dans la liste des répertoires spécifiés par la variable d'environnement PYTHONPATH. Ce a la même syntaxe que le shell variable PATH, c'est-à-dire une liste de noms de répertoires. Lorsque PYTHONPATH est non défini ou lorsque le fichier n'est pas trouvé , la recherche continue dans un chemin d'accès par défaut dépendant de l'installation; sous Unix, généralement :/usr/local/lib/python.

de http://docs.python.org/tutorial/modules.html#the-module-search-path

0

Il pourrait fonctionner si vous définissez la variable d'environnement PYTHONPATH pour inclure ce répertoire, .: par exemple

$ cd src 
$ export PYTHONPATH=./library_package 
$ python my_package/my_script.py 
1

Vérifiez le chemin complet que Python utilise par sys.path. Vous devriez pouvoir ajouter au chemin (en avant pour la précédence).

Bien entendu, vous pouvez également utiliser la variable d'environnement PYTHONPATH ou une solution de rechange en utilisant les fichiers .pth.

3

Considérons un problème plus général. Dans le répertoire/usr/share/pyshared/il y a beaucoup de modules. Vous souhaitez remplacer un seul des modules. Dites que le nom du module est xyz.py. Et il arrive d'utiliser d'autres modules dans/usr/shared/pyshared aussi.

Disons que nous créons $ HOME/mylibs et que nous ajoutons $ HOME au chemin sys.path de Python.

Maintenant, chaque fois que nous devons utiliser xyz, nous faisons quelque chose comme

from mylibs import xyz 

Si nous voulons revenir à la xyz d'origine, nous essayons:

import xyz # picks up from /usr/shared/pyshared 

Je me demande si ce genre de approche serait plus générale. Vous masquez uniquement les modules que vous remplacez et gardez les autres en cours d'utilisation comme d'habitude.

3
import sys 
from os.path import join, dirname, pardir 

sys.path.insert(0, join(dirname(__file__), pardir)) 

Cela vérifiera le répertoire src pour tous les modules de python, et regardera en premier. Donc, même si vous avez un module avec le même nom installé ailleurs, python va charger le module local.

sys.path documentation.

Questions connexes