如何在Python包中分发数据文件以便可读?

4 投票
2 回答
943 浏览
提问于 2025-04-17 15:47

我有一个Python模块,结构是这样的:

from distutils.core import setup
setup = (
    ...
    package_data={'mypackage': ['my/file.data']})

这个模块的包结构是这样的:

mypackage/
    setup.py
    mypackage/
        __init__.py
        my/
            file.data

__init__.py文件大概长这样:

import pkgutil
DATA = pkgutil.get_data(__name__, 'my/file.data')

其实很简单。我想做的就是把一些数据放进我的Python插件里。但是,当我用下面的命令安装它后:

sudo python setup.py install

然后尝试运行它时,我遇到了这个问题:

IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/mypackage/my/file.data'

它的安装权限不正确。

我该如何在Python中分发数据和配置文件,以便它们在运行时可以被读取呢?

2 个回答

0

我也遇到过这个问题,不过我解决了。

正如@Éric Araujo所说,你需要修改一下你的 file.data 的权限。如果你的文件权限是 400,那么安装的时候也会保持这个权限 400。但是如果你是用 root 权限安装的,那这个文件的拥有者就是 root,普通用户就无法读取这个文件。

我觉得把权限改成 644 就可以了。另外,记得删除你当前目录下的 mypackage.pkg-infobuilddist 文件夹,不然你的新权限设置不会生效。

1

我怕你不能直接做到这一点:如果我没记错的话,文件权限会原封不动地被复制。你需要写一个自定义的构建命令,在安装命令复制文件之前,先在构建目录里修改文件的权限。

最简单的办法就是在你的代码库或者源代码树里,提前设置好你想要的权限。

撰写回答