Réponses:
Ce n'est pas ainsi que PYTHONPATH fonctionne; PYTHONPATH traite son chemin de recherche différemment du shell PATH. Disons que je fais ceci:
$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py
Cela fonctionnera, en Python ( sys.path
inclura le répertoire courant):
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> quit()
Cependant, les sous-répertoires sont traités comme des packages lorsqu'il __init__.py
est présent dans le répertoire et sont ignorés par PYTHONPATH sinon:
$ mkdir /home/jsmith/python/pkg
$ cd /home/jsmith/python/pkg
$ touch __init__.py c.py d.py
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> import c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named c
Pour accéder à quelque chose dans ce sous-répertoire, cela fonctionnerait:
>>> from pkg import c # Works
>>> import pkg.c # Works
Pour lancer une solution dans laquelle chaque sous-répertoire de votre PYTHONPATH est ajouté, vous devez ajouter explicitement chaque dossier à PYTHONPATH ou par sys.path
programme. Ce comportement est intentionnel et ne se comporte en rien comme shell PATH. Étant donné le soutien de l'interprète pour les packages à cet égard, il y a sûrement une meilleure façon d'accomplir ce que vous recherchez?
Ce n'est pas ainsi que fonctionnent les variables d'environnement PATH - vous lui donnez le répertoire de niveau supérieur et il appartient à l'application de recursifier l'arborescence des répertoires si nécessaire.
Il est possible d'ajouter des sous-répertoires d'un répertoire à votre variable PYTHONPATH en utilisant le shell, bien sûr. J'utilise actuellement quelque chose de similaire à ce qui suit dans mon .bashrc:
export PYTHONPATH="$(find $HOME/ -maxdepth 2 -type d | sed '/\/\./d' | tr '\n' ':' | sed 's/:$//')"
Cela inclurait tous les sous-répertoires de votre dossier utilisateur à une profondeur de 2 dans l'arborescence. La commande find localise les répertoires ('-type d'), et les commandes sed et tr suivantes formatent la sortie de la manière habituelle des variables PATH.
Laisser '-maxdepth 2' inclurait tous les sous-répertoires de votre dossier personnel, ce qui est probablement beaucoup à rechercher. Peut-être que cela ne devrait être fait que dans votre répertoire $ HOME / repository / python-stuff.