为Python包安装静态文件

2 投票
2 回答
782 浏览
提问于 2025-04-16 22:08

(请原谅我英语不好)

我正在为我的Python应用写setup.py文件。

我的应用需要一些静态文件(比如图片)。我应该把这些文件添加到setup.py里的data_files数组中,这样文件就会安装到Linux的“/usr/xxx”路径下。

那么,我的应用在安装后怎么才能访问这些文件呢?我觉得在我的应用中使用绝对路径(比如 /usr/share/xxx/xxx.png)不是个好主意,因为这样在Windows上就无法使用了。

2 个回答

0

distribute/setuptools 提供了 pkg_resources 这个工具,主要是为了方便管理和使用 Python 包。它可以和通过 python setup.py developpip install -e 安装的包一起使用。

下面是一个 API 示例:

    import pkg_resources 
    assert pkg_resources.resource_exists('fabric', 'README.txt')
    assert not pkg_resources.resource_isdir('fabric', 'README.txt')
    myfile_path = pkg_resources.resource_filename('fabric', 'README.txt')
    myopen_file = pkg_resources.resource_stream('fabric', 'README.txt')
    myfile_str  = pkg_resources.resource_string('fabric', 'README.txt')
    contents_of_package = pkg_resources.resource_listdir('fabric', '')
2

你应该使用 sys.prefix,而不是直接写一个绝对路径:

filename = os.path.join(sys.prefix, "share", "xxx", "xxx.png")

撰写回答