我必须将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身份执行时尝试写入数据文件?
答案 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...
)