将数据文件安装到错误的位置

时间:2013-11-30 09:41:08

标签: python pip packaging easy-install package-managers

包的来源是here

我正在通过以下方式从索引安装软件包:

easy_install hackertray
pip install hackertray

easy_installimages/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

1 个答案:

答案 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