在PYTHONPATH之前考虑virtualenv包

时间:2018-02-14 16:04:08

标签: python virtualenv

我有一个设置配置,我从一个命令调用,比如说

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之后?

1 个答案:

答案 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)

我也希望看到一种更好的方法,但是应该可以!