Python 从virtualenv内的“我的路径”中永久删除路径条目

Python 从virtualenv内的“我的路径”中永久删除路径条目,python,bash,path,environment-variables,virtualenv,Python,Bash,Path,Environment Variables,Virtualenv,关于如何在virtualenv中为路径添加路径,我已经找到了很多答案,但对于如何删除路径,却没有一个答案。我在一个virtualenv和以下代码片段中工作: import sys print sys.path 印刷品: ['', '/home/prk/Enthought/Canopy_64bit/User/lib/python2.7/site-packages', '', '/home/prk/anaconda2/envs/dato-env/lib/python27.zip', '

关于如何在virtualenv中为路径添加路径,我已经找到了很多答案,但对于如何删除路径,却没有一个答案。我在一个virtualenv和以下代码片段中工作:

import sys
print sys.path
印刷品:

['',
 '/home/prk/Enthought/Canopy_64bit/User/lib/python2.7/site-packages',
 '', 
 '/home/prk/anaconda2/envs/dato-env/lib/python27.zip', 
 '/home/prk/anaconda2/envs/dato-env/lib/python2.7', 
 '/home/prk/anaconda2/envs/dato-env/lib/python2.7/plat-linux2', 
 '/home/prk/anaconda2/envs/dato-env/lib/python2.7/lib-tk', 
 '/home/prk/anaconda2/envs/dato-env/lib/python2.7/lib-old', 
 '/home/prk/anaconda2/envs/dato-env/lib/python2.7/lib-dynload', 
 '/home/prk/anaconda2/envs/dato-env/lib/python2.7/site-packages/setuptools-18.4-py2.7.egg', 
 '/home/prk/anaconda2/envs/dato-env/lib/python2.7/site-packages', 
 '/home/prk/anaconda2/envs/dato-env/lib/python2.7/site-packages/IPython/extensions', 
 '/home/prk/.ipython']
现在我想从这个列表中永久删除
'/home/prk/enthught/candoy_64bit/User/lib/python2.7/site packages'
。实际上,问题是我在python代码中导入了一个特定的包(比如一个特定的包X)。现在,这个包X位于我的
enthund
路径(上面列表中的第一条路径)和
anaconda2
路径(上面列表中的第二条路径)内。现在,当我导入X时,我希望它访问
anaconda
路径中的X,但由于它在上面的列表中按顺序搜索导入的包,因此它首先在
enthund
中找到它,并尝试在该路径中执行代码。我可以想出三种方法来解决这个问题:

  • 从此列表中永久删除
    '/home/prk/enthught/Canopy_64bit/User/lib/python2.7/site packages'
    。我想我会编辑virtualenv的初始化文件,以删除或重新排序
    路径
    ,使其更符合我的喜好,但我不知道如何做到这一点。有效的临时修复方法是:

    import sys
    del sys.path[1]
    import X
    
    但是在我的virtualenv中的每个
    .py
    文件中都放上它是不可能的

  • 另一种方法是以某种方式将
    anaconda
    路径添加到
    enthund
    路径之前。我阅读了
    .pth文件
    。我将扩展名为
    .pth
    的文件放在我的virtualenv的site packages文件夹中(
    /home/prk/anaconda2/envs/dato env/lib/python2.7/site packages
    ),其中包含我的包的目录的绝对路径是它唯一的内容。这不管用。我在其中一条评论中读到它在linux上不起作用

  • 我想我会删除并重新安装我的virtualenv,使用除我不想要的路径之外的所有路径从头开始重置它,但我不知道为什么它总是在默认情况下将
    enthund
    路径添加到我列表的顶部。因为我在virtualenv中工作,所以列表不应该只包含我的virtualenv(在dato env中)中的路径,因为除了第一个路径之外,所有其他路径都是

  • 在my virtualenv中编辑1
    $PATH
    显示:

    bash: /home/prk/anaconda2/envs/dato-env/bin:
    /home/prk/Enthought/Canopy_64bit/User/bin:
    /usr/local/sbin:/usr/local/bin:/usr/sbin:
    /usr/bin:/sbin:/bin:/usr/local/sbin:
    /usr/local/bin:/usr/sbin:/usr/bin:/sbin:
    /bin:/usr/games: No such file or directory
    

    $PYTHONPATH
    $PYTHONHOME
    不显示任何内容。

    您可以编辑虚拟环境的“激活”bash文件以删除所需的目录。为此,请基本遵循以下步骤:

  • 在文本编辑器中打开“激活”文件。你可以在
    ../your_virtual_environment_folder/bin/activate
    
  • 在该文件末尾添加以下行

    directory_to_remove=/home/prk/Enthought/Canopy_64bit/User/bin
    PATH=:$PATH:
    PATH=${PATH//:$directory_to_remove:/:}
    PATH=${PATH#:}; PATH=${PATH%:}`
    
  • 重新启动/重新激活虚拟环境

  • 您可以编辑虚拟环境的“激活”bash文件以删除所需的目录。为此,请基本遵循以下步骤:

  • 在文本编辑器中打开“激活”文件。你可以在
    ../your_virtual_environment_folder/bin/activate
    
  • 在该文件末尾添加以下行

    directory_to_remove=/home/prk/Enthought/Canopy_64bit/User/bin
    PATH=:$PATH:
    PATH=${PATH//:$directory_to_remove:/:}
    PATH=${PATH#:}; PATH=${PATH%:}`
    
  • 重新启动/重新激活虚拟环境

  • 虚拟环境中的env var
    PYTHONPATH
    PYTHONHOME
    的值是多少?使用
    -s
    运行python时会发生什么情况(不要将用户站点目录添加到
    sys.path
    )您使用的是哪个版本的
    virtualenv
    ?@MartinKonecny Check edit。你的问题的第二部分怎么说?激活我的dato env(source activate dato env)后,我正在打开一个ipython笔记本并处理它。在虚拟环境中,env var
    PYTHONPATH
    PYTHONHOME
    的值是多少?使用
    -s
    运行python时会发生什么情况(不要将用户站点目录添加到
    sys.path
    )您使用的是哪个版本的
    virtualenv
    ?@MartinKonecny Check edit。你的问题的第二部分怎么说?激活我的dato env(源激活dato env)后,我打开了一个ipython笔记本并正在处理它。