如何在python setup.py中修改文件权限?

3 投票
2 回答
4489 浏览
提问于 2025-04-16 09:09

我创建了一个Python包,并写了一个setup.py文件,想把一个数据文件复制到一个专门创建的文件夹~/.did里。问题是,我必须用sudo权限来运行setup.py,因为它要写入/usr/local/... 所以当我的数据文件被复制到~/.did时,只有root用户可以对这个文件进行写入。

于是我决定在setup()函数之后加一个os.chmod()的调用,但我想知道有没有人有更好的方法来做到这一点。

这是我的setup.py文件:

#!/usr/bin/env python

from distutils.core import setup
import os

home=os.path.expanduser('~')

setup(name='did',
      version='1.0',
      description='Daily Image Downloader',
      author='Luc Mazon',
      author_email='my@mail.com',
      url='',
      license='GNU GPL v3',
      scripts=['did'],
      packages=['didlib'],
      data_files=[
                  ('/usr/share/man/man1', ['doc/did.1.gz']),
                  (home+'/.did', ['did.xml'])
                 ]
     )

os.chmod(home+'/.did/did.xml', 0666)

因为did.xml不是一个Python文件,所以我还创建了一个MANIFEST.in文件,里面有以下一行:

include did.xml

我的包的整体结构如下:

did-1.0
 | didlib
 |  | __init__.py
 |  | variouspyfiles.py
 | doc
 |  |-did.1.gz
 | MANIFEST.in
 | did.xml
 | did
 | setup.py

2 个回答

0

对我来说,你要么是在找 chown(更改文件的拥有者),要么是在找 chgrp(更改文件的所属组)。

而且我不明白你为什么要用 sudo,你只需要对那些文件有正确的访问权限。 所以只需添加 chmod -R gou+rx setup_dir,这样就可以浏览安装的内容了。

4

我觉得更好,也更符合常规做法的是,不要在安装程序的主目录下写任何配置文件。那其他用户怎么办呢?更好的做法是在程序启动时检查一下,运行程序的用户是否已经有这个文件,如果没有再新建一个。

撰写回答