如何在Python的setup.py中使用chmod命令修改文件权限?

3
我使用setup.py创建了一个Python包安装程序,我希望它能够复制一个数据文件到专门为此创建的文件夹~/.did中。问题是,由于它要写入/usr/local/...,所以我必须使用sudo权限调用setup.py。因此,当我的数据文件被复制到~/.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

这是一个非常糟糕的想法,因为它只能用于单个用户。系统范围的数据应该放在 /usr/share 或类似的位置。 - Ignacio Vazquez-Abrams
文件did.xml完全依赖于用户(实际上,它是特定用户的配置文件),因此我认为将其放置在~/.did中就足够了。 - kluck
4
您的程序应在第一次运行时创建它。 - Ignacio Vazquez-Abrams
2个回答

4

我认为最好、也更加常规的做法,是在安装程序的主目录下写任何配置文件。考虑其他用户呢?更好的做法是,在初始化时让你的代码检查该文件是否存在于当前运行它的用户的目录下,只有当该文件不存在时才添加一个新的。


我应该尝试在安装过程中将“did.xml”文件安装在“/usr/share”目录下,然后在脚本执行期间在初始化时复制该文件(以进行进一步的自定义编辑)?那么最好安装该文件的位置是哪里? - kluck
@kluck 这取决于它有多大。如果很小,您可以尝试将模板作为三引号字符串嵌入到源代码中。然后将该字符串写入用户的新配置文件。它也会自动具有正确的权限。 - Keith
是的,这个文件大约有40行,我可以轻松地将它放在我的代码中。非常感谢! - kluck

0

对于您来说,您要寻找的是更改所有者的chown或更改组的chgrp。

此外,我不明白为什么您要使用sudo,您只需要对这些文件具有正确的访问权限。 因此,只需添加chmod -R gou+rx setup_dir即可浏览安装程序。


我制作sudo的原因是因为setup.py运行了以下命令:“creating /usr/local/lib/python2.6/dist-packages/didlib”,而没有root访问权限无法执行。我不太擅长于chmod/chown/chgrp,但如果我继续使用sudo(因为目前我没有看到其他方法),我想命令“os.chown('〜/。did / did.xml',os.geteuid())”将无法工作,因为os.geteuid()应该给我root id?那我应该输入什么呢? - kluck
我觉得我会使用当前用户执行脚本,并在需要时调用sudo。通过这样做,我知道当前用户,并且具有正确的权限。我避免使用sudo权限。 - ykatchou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接