未设置VIRTUAL_ENV时,root用户不包括站点软件包

时间:2018-07-05 11:30:03

标签: python python-3.x

以root身份运行python时,我发现了一个奇怪的行为。

当我在环境中将VIRTUAL_ENV设置为任何值时,python3.6在python-path中包括site-packages目录。如果在当前环境中未设置该变量,则省略路径:

 ▲ ~ @ deepthought su -
 Password: 
root@deepthought:~# python3 -c "import sys;print(sys.path)"
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']

root@deepthought:~# export VIRTUAL_ENV=
root@deepthought:~# python3 -c "import sys;print(sys.path)"
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']

site package documentationDebian Python Policy中,都找不到对此行为的任何解释。尝试从systemd运行通过pip安装的python软件包时,这会导致某些不良行为,据我所知,它们都没有提到虚拟环境。

我的一位同事怀疑默认情况下root用户不包括site-packages文件夹,以避免下载的软件包的安全问题,但是,将VIRTUAL_ENV设置为任何(甚至是空)值的“ FIX”似乎很奇怪。

当然,您也可以将路径显式添加到PYTHON_PATH变量中,以暗示您“知道您在做什么以及它可能带来的影响”,但这根本不是我在su之后运行命令行时所期望的是从设置了VIRTUAL_ENV的用户那里导入的,因此将其导入到新环境中,所以我很想知道为什么在设置此ENV变量时会导入它。

P.S .: 我在python2.7下无法观察到相同的行为,也无法测试任何其他次要python3版本。

0 个答案:

没有答案