加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么virtualenv从我的shell继承$PYTHONPATH?

发布时间:2020-12-15 22:57:40 所属栏目:安全 来源:网络整理
导读:所以我在Ubuntu 14.04机器上将我的所有工具从 python2迁移到 python3.4.到目前为止,我已经完成了以下工作: 在我的zshrc中为我的用户使用python到python3 在系统本身上安装了pip3(但我只是将virtualenvs用于所有事情,所以我不会真正使用它) 将我的virtualenv
所以我在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已经在内部处理它自己的路径时,将$PYTHONPATH设置为shell中的env-var?
>我正确使用$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",'/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)

解决方法

我偶然发现 this answer大约$PYTHONPATH,这对我来说就解决了这个问题.基本上,设置$PYTHONPATH是可选的,对用户来说是方便的.它应该只包含用户想要添加到其python路径的其他路径,以便用户不必在python本身中执行此操作只是为了从终端运行脚本.

因此,为了解决上面的问题,我将$PYTHONPATH(在我的zshrc中)设置为仅我的’$HOME / dev’的附加文件夹,而不是其他任何内容.这消除了我的路径中对python2的引用,我的所有python3程序都在我的virtualenv中按预期启动.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读