如果没有以root身份运行,如何跳过安装数据文件?

时间:2013-03-22 09:42:26

标签: python pip setup.py

我必须将Python项目与通过命令行界面使用的脚本一起部署。为了帮助用户,我还提供了一个放在/etc/bash_completion.d中的Bash完成文件。不幸的是,以普通用户身份安装时,使用pip install project.tar.gz安装源代码分发失败,因为

error: could not delete '/etc/bash_completion.d/completion': Permission denied

使用pip install -e .安装项目是有效的,因为写入问题会被忽略。

现在,有没有办法告诉分发它不应该在没有以root身份执行时尝试写入数据文件?

1 个答案:

答案 0 :(得分:1)

distribute中有一个non-root option,如果您不是超级用户,可能会发现它无法写入/etc(但我对此表示怀疑)

您没有说明您的distribute如何写/etc,但您可以将其置于try:except:条款中(当然,如果这在setup.py中是自动执行的,您可能必须将该部分取出并手动执行。

如果您不确定在运行脚本之前是否可以写/etc(在用户案例中),您可以这样做

 try:
      with open('/etc/bash_completion.d/completion', 'w') eo:
          eo.write('test')
      data_files = ['completion', '/etc/bash_completion.d/completion']
 except error:
      print 'User does not have write access to /etc completion will not work'
      data_files = []

 setup(
      ...
      data_files=data_files,
      etc...
 )