I had a devil of a time sorting this out; it must be documented in other places, but on the off chance that this information is useful to anyone, I’m posting it here.
I wrote a django app that had a custom management command in it. When I ran this app in my development environment, it ran fine. But when I deployed it from Pypi as an egg, the command mysteriously disappeared. Django simply did not see it.
Django not seeing management commands is a common problem for me, it seems like I always have to say “please” in just the right tone of voice before my custom management commands will work. This problem, however, was a new one for me.
I ended up exploring the Django sources and discovered, eventually, that the
imp builtin was unable to find anything inside a zipped egg. This struck me as odd, so I did some research on a nifty tool I discovered (over a decade ago) called Google.
I came across this message, which basically says that Django and Django apps are “flat-out not zip-safe and probably never will be”, making specific reference to custom management commands.
Then I had to do more research to figure out how to mark my app as not zip safe. I ended up switching my setup.py for the app from
setuptools and added a
zip_safe=False argument to the setup call.
In addition, for my future and perpetual sanity, I discovered that buildout can accept an
unzip=true command to ALWAYS unzip eggs. I placed this under the
[buildout] section in my