从我在virtualen中的路径中永久删除一个路径条目

2024-05-14 15:03:49 发布

您现在位置:Python中文网/ 问答频道 /正文

在virtualenv中,我遇到了很多关于如何将路径添加到path的答案,但是没有关于如何删除路径的答案。我在virtualenv中工作,下面是代码片段:

import sys
print sys.path

印刷品:

^{pr2}$

现在我想从这个列表中永久删除'/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. 另一种方法是在Enthought路径之前添加anaconda路径。我读过.pth files。我把一个扩展名为.pth的文件放在我的virtualenv的site packages文件夹(/home/prk/anaconda2/envs/dato-env/lib/python2.7/site-packages),其中包含我的包的目录的绝对路径是它的唯一内容。这不管用。我在其中一条评论中读到here它在linux上不起作用。

  3. 我想我会删除并重新安装我的virtualenv,使用所有的路径重新设置它,但是我不知道为什么它总是默认地将Enthought路径添加到列表的顶部。既然我在virtualenv中工作,那么列表不应该只包含我的virtualenv(dato env内部)中的路径,因为除了第一个路径之外,其他所有路径都应该包含吗?

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


Tags: path代码路径home列表binvirtualenvpackages
1条回答
网友
1楼 · 发布于 2024-05-14 15:03:49

你可以删除你想要的虚拟目录。为此,基本上遵循以下步骤:

  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. 重新启动/重新激活虚拟环境。在

相关问题 更多 >

    热门问题