【问题标题】:Why does virtualenv inherit $PYTHONPATH from my shell?为什么 virtualenv 从我的 shell 继承 $PYTHONPATH?
【发布时间】:2014-08-26 08:27:51
【问题描述】:
所以我在 Ubuntu 14.04 机器上将我的所有工具从 python2 迁移到 python3.4。到目前为止,我已经完成了以下工作:
- 在我的 zshrc 中为我的用户将 python 别名为 python3
- 在系统本身上安装了 pip3(但无论如何我都会使用 virtualenvs,所以我不会真正使用它)
- 将我的 virtualenvwrapper “make”别名更改为
mkvirtualenv --python=/usr/bin/python3(下面将“workon”调用为“v”)
现在奇怪的是,您可以在下面清楚地看到它,从 virtualenv 激活的环境中运行 python3 仍然继承了我的 $PYTHONPATH,它仍然为我的所有 python2 路径设置。在我的 virtualenv 中安装/运行程序时,这会造成严重破坏,因为 python3 路径显示在旧的 python2 路径之后,因此我的程序中首先导入了 python2 模块。在启动 virtualenv 之前将我的 $PYTHONPATH 清空为 '' 可以解决此问题,并且我的程序按预期启动。但我的问题是:
- virtualenvs 中 $PYTHONPATH 的这种继承是否正常?这不是破坏了整个目的吗?
- 当 python 已经在内部处理它自己的路径时,为什么要在 shell 中将 $PYTHONPATH 设置为 env-var?
- 我是否正确使用了 $PYTHONPATH?我是否应该只在我的“zshrc”中设置它以仅列出我的个人添加 ($HOME/dev) 而不是冗余的“/usr/local/lib/”位置?
- 我可以在调用它们之前非常轻松地导出备用 python3 路径以用于我的 virtualenvs,并在完成后重置它们,但这是解决此问题的最佳方法吗?
○ 回声 $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
○ 蟒蛇2
Python 2.7.6(默认,2014 年 3 月 22 日,22:59:56)
[GCC 4.8.2] 在 linux2 上
输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。
>>> 导入系统,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
○ 蟒蛇3
Python 3.4.0(默认,2014 年 4 月 11 日,13:05:11)
[GCC 4.8.2] 在 Linux 上
输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。
>>> 导入系统,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)
【问题讨论】:
标签:
python
virtualenv
pythonpath
virtualenvwrapper
zshrc