3

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

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

pip install -e .由于忽略了写作问题,因此安装了该项目。

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

4

1 回答 1

1

如果您不是超级用户(但我对此表示怀疑),有一个非 root 选项distribute可能足够智能以发现它无法写入。/etc

您没有说明如何distribute写信,/etc但是您可以将其放在try:and 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...
 )
于 2013-03-22T09:57:03.133 回答