Respuestas:
Así no es como funciona PYTHONPATH; PYTHONPATH trata su ruta de búsqueda de manera diferente a la ruta de shell. Digamos que hago esto:
$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py
Esto funcionará en Python ( sys.path
incluirá el directorio actual):
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> quit()
Sin embargo, los subdirectorios se tratan como paquetes cuando __init__.py
están presentes en el directorio, y PYTHONPATH los ignora de lo contrario:
$ 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
Para llegar a algo en ese subdirectorio, esto funcionaría:
>>> from pkg import c # Works
>>> import pkg.c # Works
Para lanzar una solución donde se agregue cada subdirectorio en su PYTHONPATH, debe agregar explícitamente cada carpeta a PYTHONPATH o mediante sys.path
programación. Este comportamiento es intencional y no se comporta en nada como Shell PATH. Dado el apoyo del intérprete para los paquetes a este respecto, ¿seguramente hay una mejor manera de lograr lo que busca?
No es así como funcionan las variables PATH de entorno: le da el directorio de nivel superior y depende de la aplicación repetir el árbol de directorios si es necesario.
Es posible agregar subdirectorios de un directorio a su variable PYTHONPATH usando el shell, por supuesto. Actualmente uso algo similar a lo siguiente en mi .bashrc:
export PYTHONPATH="$(find $HOME/ -maxdepth 2 -type d | sed '/\/\./d' | tr '\n' ':' | sed 's/:$//')"
Esto incluiría todos los subdirectorios de su carpeta de usuario a una profundidad de 2 en el árbol. El comando find localiza los directorios ('-type d'), y los siguientes comandos sed y tr dan formato a la salida de la manera habitual de las variables PATH.
Dejar '-maxdepth 2' incluiría todos los subdirectorios de su carpeta de inicio, que probablemente sea mucho para buscar. Quizás esto solo debería hacerse en su directorio $ HOME / repository / python-stuff.