从virtualenv

时间:2016-01-17 05:20:11

标签: python bash path environment-variables virtualenv

我遇到了很多关于如何在virtualenv中添加路径到PATH但没有关于如何删除路径的答案。我在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/Enthought/Canopy_64bit/User/lib/python2.7/site-packages'。实际上问题是我在我的python代码中导入某个包(比如一个特定包 X )。现在,此程序包 X 位于我的Enthought路径(上面列表中的第一个路径)和anaconda2内部(第二个路径之后)在上面的列表中)。现在当我导入 X 时,我希望它能够访问anaconda路径中的 X ,但是因为它会依次通过上面的列表搜索导入的包首先在Enthought中找到它并尝试执行代码。我有三种方法可以解决这个问题:

  1. 永久删除此列表中的'/home/prk/Enthought/Canopy_64bit/User/lib/python2.7/site-packages'我想我会编辑virtualenv的初始化文件,以删除或重新排序PATH更多内容我喜欢但我不知道如何做到这一点。有效的临时修复方法是:

    import sys
    del sys.path[1]
    import X
    

    但是将其放在我的virtualenv中的每个.py文件中是不可能的。

  2. 另一种方法是以某种方式在anaconda路径之前添加Enthought路径。我读到了.pth files。我在virtualenv的site-packages文件夹(.pth)中放置了一个/home/prk/anaconda2/envs/dato-env/lib/python2.7/site-packages扩展名的文件,其中包含我的包的目录的绝对路径是唯一的内容。这不起作用。我在其中一条评论here中读到它并不适用于Linux。

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

  4. 编辑1 在我的virtualenv中: Enthought显示:

    $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不显示任何内容。

1 个答案:

答案 0 :(得分:0)

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

  1. 在文本编辑器中打开“激活”文件。你可以在找到它
    ../your_virtual_environment_folder/bin/activate
    
  2. 在该文件的末尾添加以下几行。

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