包的来源是here
我正在通过以下方式从索引安装软件包:
easy_install hackertray
pip install hackertray
easy_install
将images/hacker-tray.png
安装到以下文件夹:
/usr/local/lib/python2.7/dist-packages/hackertray-1.8-py2.7.egg/images/
同时,pip
将其安装到:
/usr/local/images/
我的setup.py如下:
from setuptools import setup
setup(name='hackertray',
version='1.8',
description='Hacker News app that sits in your System Tray',
packages=['hackertray'],
data_files=[('images', ['images/hacker-tray.png'])])
我的MANIFEST
文件是:
include images/hacker-tray.png
答案 0 :(得分:12)
不要将data_files
与相对路径一起使用。实际上,根本不要使用data_files
,除非您确保目标路径是以跨平台方式正确生成的硬编码值的绝对路径。
改为使用package_data
:
setup(
# (...)
package_data={
"hackertray.data": [
"hacker-tray.png",
],
},
)
其中hackertray.data
是一个合适的python包(即包含名为__init__.py
的文件的目录),而hacker-tray.png
就在__init__.py
旁边。
以下是它的外观:
.
|-- hackertray
| |-- __init__.py
| `-- data
| |-- __init__.py
| `-- hacker-tray.png
`-- setup.py
您可以使用以下方式获取图像文件的完整路径:
from pkg_resources import resource_filename
print os.path.abspath(resource_filename('hackertray.data', 'hacker-tray.png'))
我希望有所帮助。
PS:Python< 2.7似乎有关于package_data
中列出的文件打包的错误。如果您使用比Python 2.7更早的东西进行打包,请始终确保拥有清单文件。有关详细信息,请参阅此处:https://groups.google.com/d/msg/python-virtualenv/v5KJ78LP9Mo/OiBqMcYVFYAJ