pip: Why sometimes installed as egg, sometimes installed as files
I was having this egg-only install problem, and it turned out I had failed to git add the __init__.py
in the root of my package. It was driving me crazy that this would work:
pip install .
...but this would fail:
mkdir /tmp/piptest
cd /tmp/piptest
git clone $OLDPWD .
pip install .
It was hard to notice the difference using diff -r . $OLDPWD
because there are so many non-committed pyc files and development tool scripts.
This is probably not the answer for this OP, but I hope it helps someone who Googles "pip only installing the egg" as I did.
This does not solve the question why I get sometimes zipped eggs, and sometimes not. But it helps.
You can use this in your ~/.distutils.cfg
to avoid installation of zipped eggs:
[easy_install]
zip_ok = False
If you are the author of the package, you can use the flag zip_safe=False
in setup.py
.
setup(
name = "HelloWorld",
...
zip_safe = False,
)
If you are a user who wants to improve the package, you can install it by pip install -e foo_package
. The option -e
or --editable
installs a project in an editable mode (i.e. setuptools "develop mode"), not zipped. It creates a link from source into site-packages
and compiles .../bin
scripts, but it doesn't copy the source into "site-packages". Those packages can not be updated automatically. It is the main reason why it is not intended as a usual way of installing packages, but only for those that need to be customized or fixed.
Edit: Django is a typical framework that requires zip_safe=False
for its applications, because they are not a pure Python, but they contain also templates with html, css, i18n resources etc. Is your question related to Django?