为Python包安装静态文件
(请原谅我英语不好)
我正在为我的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 develop
或 pip 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")