python安装程序在激活的virtualen之外安装

2024-06-16 14:56:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用setuptools在python中有一个安装代码,并且我有要安装在/usr/share/mypackage(由root拥有)中的python代码,但我尝试以非特权用户的身份安装该包。因此,我在用户拥有的目录$ENVDIR中创建一个虚拟环境(使用virtualenv)。然后,在激活虚拟环境(使用source $ENVDIR/bin/activate)之后,我运行python /usr/share/mypackage/setup.py install。在

问题是运行setup.py install试图创建一个包装.鸡蛋-/usr/share/mypackage中的info(或类似的)文件,这显然会触发一个权限拒绝错误,除非我以root身份运行安装程序,这不是我需要的。。。在

所以,问题是:我如何在不运行的情况下修复这个问题设置.py作为根?也就是说,我如何预防设置.py从写到/usr/share/mypackage?在


Tags: install代码用户py目录shareusrsetup
1条回答
网友
1楼 · 发布于 2024-06-16 14:56:49

不能以非特权用户身份安装到/usr/share任何解决方法都会违反unix权限。公平地说,您不应该在默认情况下在/usr/share中安装任何东西。/usr/share是操作系统/发行版的领地,在手工安装软件时不应干涉,正确的位置是/usr/local/share。参考号:The FHS spec

默认情况下,打包软件安装在/usr/local上,但允许交换机更改此路径。编译发行版的人会将前缀改为/usr,如果不改变前缀,操作系统就永远不会被编译!python和setuptools没有什么不同,它们有这样一个前缀开关。在

setuptools中,定义与distribution root相关的目录。在setup.py中使用绝对路径是一个明显的错误。默认情况下,分布根是由sys.prefix定义的。此外,setuptools还有一个 prefix开关,可以从命令行更改该值。您应以非特权用户身份安装软件包:

setup.py  prefix=~/local

现在,virtualenv激活脚本设置VIRTUAL_ENV环境变量。在virtualenv内时可以使用:

^{pr2}$

(这就是pip的作用)


附录

我知道python默认情况下会将sys.prefix设置为'/usr'。因此鼓励将包直接安装到/usr,而不是{}。但是,这仍然违反了FHS规范,应该避免。在

相关问题 更多 >