pip installing data files to the wrong place
easy-install, package-managers, packaging, pip, python
Solution
Don't use `data_files` with relative paths. Actually, don't use `data_files` at all, unless you make sure the target paths are absolute ones properly generated in a cross-platform way insted of hard coded values.
Use `package_data` instead:
setup(
# (...)
package_data={
"hackertray.data": [
"hacker-tray.png",
],
},
)
where `hackertray.data` is a proper python package (i.e. is a directory that contains a file named `__init__.py`) and `hacker-tray.png` is right next to `__init__.py`.
Here's how it should look:
.
|-- hackertray
| |-- __init__.py
| `-- data
| |-- __init__.py
| `-- hacker-tray.png
`-- setup.py
You can get the full path to the image file using:
from pkg_resources import resource_filename
print os.path.abspath(resource_filename('hackertray.data', 'hacker-tray.png'))
I hope that helps.
PS: Python<2.7 seems to have a bug regarding packaging of the files listed in `package_data`. Always make sure to have a manifest file if you're using something older than Python 2.7 for packaging. See here for more info: https://groups.google.com/d/msg/python-virtualenv/v5KJ78LP9Mo/OiBqMcYVFYAJ
Problem
The source for the package is here I'm installing the package from the index via: ``` easy_install hackertray pip install hackertray ``` `easy_install` installs `images/hacker-tray.png` to the following folder: ``` /usr/local/lib/python2.7/dist-packages/hackertray-1.8-py2.7.egg/images/ ``` While, `pip` installs it to: ``` /usr/local/images/ ``` My setup.py is as follows: ``` 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'])]) ``` My `MANIFEST` file is: ``` include images/hacker-tray.png ```