Atualmente, faço isso:
PYTHONPATH=/home/$USER:/home/$USER/respository:/home/$USER/repository/python-stuff
Como posso fazer para que o PYTHONPATH inclua todo o subdiretório?
PYTHONPATH = /home/$USER/....and-all-subdirectories
Atualmente, faço isso:
PYTHONPATH=/home/$USER:/home/$USER/respository:/home/$USER/repository/python-stuff
Como posso fazer para que o PYTHONPATH inclua todo o subdiretório?
PYTHONPATH = /home/$USER/....and-all-subdirectories
Não é assim que PYTHONPATH funciona; PYTHONPATH trata seu caminho de pesquisa de maneira diferente do PATH do shell. Digamos que eu faça isso:
$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py
Isso funcionará, em Python ( sys.path
incluirá o diretório atual):
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> quit()
No entanto, os subdiretórios são tratados como pacotes quando __init__.py
estão presentes no diretório e são ignorados pelo PYTHONPATH, caso contrário:
$ 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 chegar a algo nesse subdiretório, isso funcionaria:
>>> from pkg import c # Works
>>> import pkg.c # Works
Para rolar uma solução na qual todos os subdiretórios do seu PYTHONPATH são adicionados, você precisa adicionar explicitamente todas as pastas ao PYTHONPATH ou sys.path
programaticamente. Esse comportamento é intencional e não se comporta como o PATH do shell. Dado o suporte do intérprete a pacotes nesse sentido, certamente há uma maneira melhor de realizar o que você procura?
Não é assim que as variáveis PATH do ambiente funcionam - você fornece o diretório de nível superior e cabe ao aplicativo recursar a árvore de diretórios, se necessário.
fonte
É possível adicionar subdiretórios de um diretório à sua variável PYTHONPATH usando o shell, é claro. Atualmente, uso algo semelhante ao seguinte no meu .bashrc:
Isso incluiria todos os subdiretórios da sua pasta de usuário a uma profundidade de 2 na árvore. O comando find localiza os diretórios ('-type d'), e os seguintes comandos sed e tr formatam a saída da maneira usual das variáveis PATH.
Sair de '-maxdepth 2' incluiria todos os subdiretórios da sua pasta pessoal, o que provavelmente é muito para pesquisar. Talvez isso deva ser feito apenas no diretório $ HOME / repository / python-stuff.
fonte