禁用PIP安装到用户目录

当前使用的 CentOS 7 系统上, 在某些脚本中自动安装一些软件竟然安装到root的用户的目录下了,其他用户根本用不了,因此针对该现象进行了分析。

问题基本分析

正常情况下软件包是安装到系统目录下的,也就是安装目录下的 site-packages 目录,但是不知道为啥会安装到用户目录,不管什么情况了,总之将其改掉,全部安装到系统目录下。

经常上网搜索发现了其有一个这样的命令

pip -m site

其输出也很有意思

sys.path = [
'/root',
'/usr/lib64/python27.zip',
'/usr/lib64/python2.7',
'/usr/lib64/python2.7/plat-linux2',
'/usr/lib64/python2.7/lib-tk',
'/usr/lib64/python2.7/lib-old',
'/usr/lib64/python2.7/lib-dynload',
'/root/.local/lib/python2.7/site-packages',
'/usr/lib64/python2.7/site-packages',
'/usr/lib/python2.7/site-packages',
]
USER_BASE: '/root/.local' (exists)
USER_SITE: '/root/.local/lib/python2.7/site-packages' (exists)
ENABLE_USER_SITE: True

从这个输出能看出原因,但是此处并没有修改的方法。

寻找解决方案

上面分析确实是一个类似环境变量的东西,我找了一遍所有配置环境变量的地方,均没有收获。不过在仔细研究刚才那条命令的时候,意味发现了端倪

[root@localhost ~]# python -m site --help
/usr/lib64/python2.7/site.py [--user-base] [--user-site]

Without arguments print some useful information
With arguments print the value of USER_BASE and/or USER_SITE separated
by ':'.

Exit codes with --user-base or --user-site:
0 - user site directory is enabled
1 - user site directory is disabled by user
2 - uses site directory is disabled by super user
or for security reasons
>2 - unknown error

原来该配置在 /usr/lib64/python2.7/site.py 里面,打开文件开头就有定义,而且在后面的处理逻辑中是根据这个值为 None 的时候进行检测,当不是的时候不检测。

我们根据需要将该值设置为 False 即可

# Enable per user site-packages directory
# set it to False to disable the feature or True to force the feature
ENABLE_USER_SITE = False

结语

这个功能虽然我不需要,但是完全可以更改用户自己的路径上去,有需要的可以参考。

更早的文章

NGINX支持中文目录索引(Win32)

Windows平台上在使用Nginx的时候无法支持中文路径,哪怕是直接访问一个中文路径,也无法访问到,访问文件是404,访问目录是500。 解决方案思考正常情况下先访问一个内部有中文文件或目录的目录,Nginx会显示为乱码(调整网页编码能正确),而且其中的链接是直接编码的,什么意思,就是这个链接是G …

技术 继续阅读