【发布时间】:2023-04-08 14:27:02
【问题描述】:
我遇到了很多关于如何在 virtualenv 中添加 PATH 路径的答案,但没有关于如何删除路径的答案。我在 virtualenv 和以下代码 sn-p 中工作:
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 中尝试执行代码。我可以想到 3 种方法来解决这个问题:
-
从此列表中永久删除
'/home/prk/Enthought/Canopy_64bit/User/lib/python2.7/site-packages'。 我想我将编辑 virtualenv 的初始化文件以删除或重新排序PATH以使其更符合我的喜好,但我不知道该怎么做.一个有效的临时修复方法是:import sys del sys.path[1] import X但是将它放在我的 virtualenv 中的每个
.py文件中是不可能的。 另一种方法是在
Enthought路径之前以某种方式添加anaconda路径。我读到了.pth files。我在我的 virtualenv 的站点包文件夹 (/home/prk/anaconda2/envs/dato-env/lib/python2.7/site-packages) 中放置了一个扩展名为.pth的文件,其中包含我的包的目录的绝对路径作为其唯一内容。这行不通。我在其中一个 cmets here 中读到它不适用于 linux。我想我会删除并重新安装我的 virtualenv,使用所有路径从头开始重置它,但我不知道为什么它总是默认添加
Enthought路径到我的清单的顶部。由于我在 virtualenv 中工作,所以该列表不应该只包含我的 virtualenv 内的路径(在 dato-env 内),因为所有其他路径都不是第一个路径吗?
编辑 1 在我的 virtualenv 中:
$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 不显示任何内容。
【问题讨论】:
-
环境变量
PYTHONPATH和PYTHONHOME在虚拟环境中的值是多少?当您使用-s运行python 时会发生什么(不要将用户站点目录添加到sys.path) -
你使用的是什么版本的
virtualenv? -
@MartinKonecny 检查编辑。如何处理问题的第二部分?激活我的 dato-env(source activate dato-env)后,我正在打开一个 ipython 笔记本并进行处理。
标签: python bash path environment-variables virtualenv