2010-02-24 6 views
3

J'ai écrit un petit module d'accès DB qui est largement réutilisé dans de nombreux programmes. Mon code est stocké dans une arborescence de répertoires unique /projects pour des raisons de sauvegarde et de version, et donc le module doit être placé dans cette arborescence de répertoires, disons /projects/my_py_lib/dbconn.py.Chemin Python: Réutilisation du module Python

Je veux configurer facilement Python pour rechercher automatiquement des modules à la structure de répertoire /projects/my_py_lib (bien sûr, __init__.py doit être placé dans n'importe quel sous-répertoire).

Quelle est la meilleure façon de faire cela sous Ubuntu?

Merci,

Adam

Répondre

8

Vous pouvez ajouter une variable d'environnement PYTHONPATH à votre fichier .bashrc. par exemple.

export PYTHONPATH=/projects/my_py_lib 
+0

+1 Simple, correct et fonctionne. –

0

Une autre option est de créer un lien souple dans /usr/lib*/python*/site-packages/:

ln -s /projects/my_py_lib /usr/lib*/python*/site-packages/ 

qui fera le projet visible à tous les programmes Python ainsi que tous les changements seront visibles immédiatement, aussi. L'inconvénient principal est que vous finirez par avoir des fichiers *.pyc appartenant à root ou à un autre utilisateur, sauf si vous vous assurez de compiler les fichiers vous-même avant de lancer Python en tant qu'utilisateur.

+2

Et vous avez besoin d'un accès root. –

2

sur linux, ce répertoire sera ajouté à votre sys.path automatiquement pythonN.M

~/.local/lib/pythonN.M/site-packages/ 

Vous pouvez mettre vos paquets là-dedans pour chaque version de Python que vous utilisez.

Vous désirez obtenir une copie pour chaque version de python, sinon le fichier .pyc sera recompilé chaque fois que vous importez le module avec une autre version python

Cela permet également un contrôle à grain fin si le module ne fonctionne que pour certains des versions de python que vous avez installé

Si vous créez ce fichier

~/.local/lib/pythonN.M/site-packages/usercustomize.py 

il sera importé chaque fois que vous démarrez l'interpréteur python

+0

+1 gentil, ne savait pas celui-là. Avez-vous un lien vers la documentation? –

+0

Cela me ferait mettre du code en dehors de mon arbre de code. –

+0

@Adam Matan, vous pouvez mettre des liens symboliques vers votre arbre de code, mais gardez à l'esprit que les fichiers .pyc seront clobés si vous utilisez différentes versions de Python, mieux vaut avoir un script "release" pour le copier là-bas. –