Por que o virtualenv herda $ PYTHONPATH do meu shell?
Então, estou migrando todas as minhas ferramentas de python2 para python3.4 em uma máquina Ubuntu 14.04. Até agora, eu fiz o seguinte:
python com alias para python3 no meu zshrc apenas para o meu usuárioinstalou o pip3 no próprio sistema (mas, de qualquer maneira, usarei virtualenvs para tudo, para não usá-lo)mudei meu alias virtualenvwrapper "make" paramkvirtualenv --python=/usr/bin/python3
('workon' é chamado abaixo como 'v')Agora, curiosamente, e você pode vê-lo claramente abaixo, a execução de python3 a partir de um ambiente ativado por virtualenv ainda herda meu $ PYTHONPATH, que ainda está configurado para todos os meus caminhos python2. Isso causa estragos ao instalar / executar programas no meu virtualenv, porque os caminhos python3 aparecem APÓS os caminhos python2 antigos, de modo que os módulos python2 são importados primeiro nos meus programas. Anular meu $ PYTHONPATH para '' antes de iniciar o virtualenv corrige isso e meus programas iniciam conforme o esperado. Mas minhas perguntas são:
Essa herança de $ PYTHONPATH em virtualenvs é normal? Isso não derrota todo o propósito?Por que definir $ PYTHONPATH como um env-var no shell quando o python já manipula seus próprios caminhos internamente?Estou usando o $ PYTHONPATH corretamente? Devo apenas defini-lo no meu 'zshrc' para listar apenas minhas adições pessoais ($ HOME / dev) e não os locais redundantes '/ usr / local / lib /'?Posso exportar facilmente um caminho python3 alternativo para uso com meus virtualenvs antes de invocá-los e redefini-los quando terminar, mas essa é a melhor maneira de corrigir isso?○ echo $PYTHONPATH /usr/local/lib/python2.7/site-packages:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/home/brian/dev brian@zeus:~/.virtualenvs ○ python2 Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys, pprint >>> pprint.pprint(sys.path) ['', '/usr/local/lib/python2.7/dist-packages/pudb-2013.3.4-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/Pygments-1.6-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/urwid-1.1.1-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/pythoscope-0.4.3-py2.7.egg', '/usr/local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/home/brian/dev', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode'] >>> brian@zeus:~/.virtualenvs ○ v py3venv (py3venv) brian@zeus:~/.virtualenvs ○ python3 Python 3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sys, pprint >>> pprint.pprint(sys.path) ['', '/usr/local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/home/brian/dev', '/home/brian/.virtualenvs/py3venv/lib/python3.4', '/home/brian/.virtualenvs/py3venv/lib/python3.4/plat-x86_64-linux-gnu', '/home/brian/.virtualenvs/py3venv/lib/python3.4/lib-dynload', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/home/brian/.virtualenvs/py3venv/lib/python3.4/site-packages'] >>> (py3venv)