Почему virtualenv наследует $ PYTHONPATH от моей оболочки?
Поэтому я перенес все свои инструменты с python2 на python3.4 на машине с Ubuntu 14.04. До сих пор я сделал следующее:
псевдоним Python для Python3 в моем Zshrc только для моего пользователяустановил pip3 в самой системе (но я все равно буду использовать virtualenvs для всего, поэтому я не буду его использовать)изменил мой псевдоним "сделать" в virtualenvwrappermkvirtualenv --python=/usr/bin/python3
(«workon» вызывается ниже как «v»)Теперь, что любопытно, и вы можете ясно видеть это ниже, запуск python3 из среды, активированной virtualenv, все еще наследует мою переменную $ PYTHONPATH, которая все еще настроена для всех моих путей python2. Это приводит к хаосу при установке / запуске программ в моем virtualenv, потому что пути python3 показывают ПОСЛЕ старых путей python2, поэтому модули python2 сначала импортируются в мои программы. Обнуление моего $ PYTHONPATH на '' перед запуском virtualenv исправляет это, и мои программы запускаются, как и ожидалось. Но мои вопросы:
Является ли это наследование $ PYTHONPATH в virtualenvs нормальным? Разве это не победит всю цель?Зачем устанавливать $ PYTHONPATH как env-var в оболочке, когда python уже обрабатывает свои собственные пути внутри?Я правильно использую $ PYTHONPATH? Должен ли я просто установить его в моем zshrc, чтобы он перечислял только мои личные дополнения ($ HOME / dev), а не избыточные местоположения / usr / local / lib /?Я могу очень легко экспортировать альтернативный путь python3 для использования с моим virtualenvs непосредственно перед их вызовом и сбросить их после завершения, но разве это лучший способ исправить это?○ 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)