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

贿赂

所以我要在Ubuntu 14.04机器上将所有工具从python2迁移到python3.4。到目前为止,我已经完成了以下工作:

  1. 为我的用户在zshrc中将python别名为python3
  2. 在系统本身上安装了pip3(但是无论如何我都将使用virtualenvs,所以我不会真正使用它)
  3. 将我的virtualenvwrapper“ make”别名更改为mkvirtualenv --python=/usr/bin/python3('workon'在下面以'v'的形式调用)

现在奇怪的是,您可以在下面清楚地看到它,从virtualenv激活的环境运行python3仍然继承了我的$ PYTHONPATH,该$ PYTHONPATH仍然为我的所有python2路径设置。在我的virtualenv中安装/运行程序时,这会造成严重破坏,因为python3路径会在旧python2路径之后显示,因此python2模块会首先导入到我的程序中。在启动virtualenv之前将$ PYTHONPATH设置为''可以解决此问题,并且程序可以按预期启动。但是我的问题是:

  1. 在virtualenvs中$ PYTHONPATH的这种继承是否正常?那不是破坏了整个目的吗?
  2. 当python已经在内部处理自己的路径时,为什么在外壳程序中将$ PYTHONPATH设置为env-var?
  3. 我是否正确使用$ PYTHONPATH?我是否应该仅在“ zshrc”中设置它以仅列出我的个人添加项($ HOME / dev),而不列出多余的“ / usr / local / lib /”位置?
  4. 我可以在调用虚拟环境之前很容易地导出供我的virtualenv使用的替代python3路径,并在完成后重置它们,但这是解决此问题的最佳方法吗?
    ○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(默认值,2014年3月22日,22:59:56)
    在linux2上的[GCC 4.8.2]
    键入“ help”,“ copyright”,“ credits”或“许可证”以获取更多信息。
    >>>导入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。 
     usr/local/lib/python2.7/dist-packages/Pygments-1.6- '/usr/local/lib/python2.7/dist-packages/pythoscope-0.4.3- py2.7。
     '/usr/local/lib/python2.7/dist-packages',
     '/usr/lib/python2.7/dist-packages',
     一个'/ home /布莱恩/ 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', 
     。7 / dist-packages / ubuntu-sso-client',
     '/ usr / lib / python2.7 / dist-packages / ubuntuone-客户端”,
     “ / 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 
    Linux上的
    Python 3.4.0(默认值,2014年4月11日,13:05:11)[GCC 4.8.2]
    键入“帮助”,“版权”,“信用”或“许可证”以获取更多信息。
    >>>进口SYS,pprint 
    >>> pprint.pprint(sys.path中)
    [ '',
     '/usr/local/lib/python2.7/site-packages',
     “/usr/local/lib/python2.7 / DIST-包,
     '/usr/lib/python2.7/dist-packages',
     '/home/brian/.virtualenvs/py3venv/lib/python3.4',
     '/home/brian/.virtualenvs/py3venv/lib/python3.4/plat-x86_64-linux-gnu',
     一个“/ home /布赖恩/ .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)
贿赂

我偶然发现了有关$ PYTHONPATH的答案,它刚刚为我解决了这个问题。本质上,设置$ PYTHONPATH是可选的,对用户来说很方便。它应该只包含用户想要添加到其python路径的其他路径,这样用户就不必在python本身中执行此操作,而只是从终端运行脚本。

因此,为了解决上述问题,我将$ PYTHONPATH(在zshrc中)设置为仅其他文件夹“ $ HOME / dev”,而没有其他设置。这消除了我路径中对python2的引用,并且所有python3程序都按预期在我的virtualenv中启动。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我的PYTHONPATH包含什么?

来自分类Dev

我的PYTHONPATH包含什么?

来自分类Dev

PYTHONPATH干扰virtualenv

来自分类Dev

为什么会出现这样的PYTHONPATH设置的ImportError?

来自分类Dev

当包含目录是PYTHONPATH的一部分并且文件存在时,为什么在PYTHONPATH中找不到模块?

来自分类Dev

当我在pythonpath中时scrapy无法导入模块

来自分类Dev

Python:PYTHONPATH

来自分类Dev

为什么我的virtualenv继承了系统的旧环境变量?

来自分类Dev

如何更改我的PYTHONPATH以使3,2成为默认的Python,而不是2.7.2?

来自分类Dev

如何更改我的PYTHONPATH以使3,2成为默认的Python,而不是2.7.2?

来自分类Dev

将目录添加到PYTHONPATH也会导致我的主目录也被添加

来自分类Dev

“哪个python”和“ echo PYTHONPATH”给出了不同的目录,这意味着什么?

来自分类Dev

PYTHONPATH系统路径差异

来自分类Dev

python / pythonpath的路径问题

来自分类Dev

如何打印PYTHONPATH的内容

来自分类Dev

OSX永久设置PYTHONPATH

来自分类Dev

从.zshrc导出PYTHONPATH无效

来自分类Dev

在Vim中更改pythonpath

来自分类Dev

cron中的PYTHONPATH问题

来自分类Dev

PYTHONPATH 环境变量

来自分类Dev

PYTHONPATH首先定义在哪里?

来自分类Dev

PYTHONPATH是否应该包含./build/*?

来自分类Dev

setting/changing PYTHONPATH in OS Mavericks

来自分类Dev

如何附加到Maya PYTHONPATH?

来自分类Dev

Eclipse PyDev:__module_not_in_the_pythonpath__

来自分类Dev

如何修改单个版本的PYTHONPATH?

来自分类Dev

如何设置PYTHONPATH /安装Selenium

来自分类Dev

如何附加到Maya PYTHONPATH?

来自分类Dev

更改pythonpath的优先级