如何在Python包中分发数据文件以便可读?
我有一个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-info
、build
和 dist
文件夹,不然你的新权限设置不会生效。
1
我怕你不能直接做到这一点:如果我没记错的话,文件权限会原封不动地被复制。你需要写一个自定义的构建命令,在安装命令复制文件之前,先在构建目录里修改文件的权限。
最简单的办法就是在你的代码库或者源代码树里,提前设置好你想要的权限。