我使用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?在
不能以非特权用户身份安装到
/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
开关,可以从命令行更改该值。您应以非特权用户身份安装软件包:现在,
^{pr2}$virtualenv
激活脚本设置VIRTUAL_ENV
环境变量。在virtualenv
内时可以使用:(这就是
pip
的作用)附录
我知道python默认情况下会将}。但是,这仍然违反了FHS规范,应该避免。在
sys.prefix
设置为'/usr'
。因此鼓励将包直接安装到/usr
,而不是{相关问题 更多 >
编程相关推荐