python安装目录的正确权限?

时间:2014-02-17 22:23:25

标签: python permissions installation

我第一次尝试在服务器上使用python应用程序。我首先以root身份添加setuptools:

[root@server mydirectory]# yum install python-setuptools

冷却。然后我尝试setup.py:

[user@server mydirectory]$ python setup.py install
running install
error: can't create or remove files in install directory

The following error occurred while trying to add or remove files in the
installation directory:

    [Errno 13] Permission denied: '/usr/lib/python2.4/site-packages/test-easy-install-25752.write-test'

此目录/usr/lib/python2.4/site-packages由root拥有,因此这是有道理的。

我的问题是,我应该chmod the site-packages目录,还是应该以root身份运行setup.py?

2 个答案:

答案 0 :(得分:1)

作为非root用户在系统范围内安装内容的传统方法是使用sudo。这就是为什么你在Python文档中看到这样的东西:

sudo python setup.py install

有些人更喜欢将某个“dev”组的网站包组写为可写,因此您不需要这样做。 (这实际上是Mac包经理Homebrew所做的。)


或者,您可以安装到每个用户的站点包中。并非每个项目都可以做到这一点,但基于现代setuptools的任何事情都应该能够做到这一点。

而且,虽然我们正在使用它,但如果您正在安装基于现代setuptools的内容,那么最好pip install .而不是python setup.py install。除了其他好处之外,这将创建egg-info文件,以便可以将包检测为依赖项,卸载等。

有关详细信息,请参阅Python Packaging User Guide


最后,您可能需要考虑使用virtual environment。使用Python 3.3+,它内置为venv,尽管它在3.4之前没有自己的pip。使用早期版本的Python,您可以在PyPI上安装virtualenv

Python(2.x或3.x)的许多托管服务器环境预先安装了virtualenv。如果没有,在系统范围内安装 it 当然要求你成为root用户...但之后,你将能够将(大多数)其他软件包安装到每个项目的虚拟环境而不是系统范围内

答案 1 :(得分:1)

使用pip / easy_install安装软件包并直接运行setup.py文件需要root权限,因为它们在这些受限文件夹中读/写。

通常像www.openshift.com这样的主机为您支持virtualenv,因此您只需激活它,并拥有自己的每用户环境。通常禁止影响全局站点包,因为它可能是共享主机。

根据我的经验,在本地安装ubuntu的笔记本电脑中,我有两种选择:

  1. 以sudo
  2. 运行installs
  3. 在virtualenv中运行安装
  4. 也许您的主机(如果共享)支持virtualenv。试着问他们是否不支持它。