我有一个设置配置,我从一个命令调用,比如说
source mysetup.sh
这配置了大量的东西:gcc-compiler,python可执行文件(版本,...),...,PATH
包括curstom库和PYTHONPATH
。通过这种方式,我可以使用一致的环境,并且我也可以访问非标准的python包,如numpy(来自PYTHONPATH
)。 我无法更改mysetup.sh
。
现在,我想使用其他python包或其他版本,但我没有root访问权限,我想避免使用pip --user
所以我使用的是virtualenv。问题是,如果我这样做:
virtualenv -p `which python` my_virtual_env
source my_virtual_env/activate.sh
pip install numpy, tqdm
python
import numpy, tqdm
print numpy.__file__, tqdm.__file__
我看到numpy仍然来自PYTHONPATH
中列出的目录之一,而tqdm来自my_virtual_env
(因为它只在那里可用)。如果我查看import sys; sys.path
,我会看到PYTHONPATH
中的目录包含之前来自virtualenv的目录,这是我问题的根源。我希望python首先尝试查看my_virtual_env
个包,然后才到PYTHONPATH
,但我仍然不想摆脱PYTHONPATH
因为我需要的东西(所以我不能只做export PYTHONPATH=""
)。
那么:我怎样才能让python首先进入虚拟环境并且仅在PYTHONPATH
之后?
答案 0 :(得分:0)
这是一种可以在python中解决此问题的方法:
import sys
import os
user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
for path in user_paths:
sys.path.remove(path)
for path in user_paths:
sys.path.append(path)
我也希望看到一种更好的方法,但是应该可以!