The following error occurred while trying to extract file(s) to the Python eggThe problem is that the app was running as www-data (which was the user created for nginx and Apache). www-data's home directory is /var/www, but it doesn't have write access to it. (I'm afraid of allowing write access so that it can unpack eggs into that directory because that directory is the web root. In general, you should be careful of what you put in the web root.)
[Errno 13] Permission denied: '/var/www/.python-eggs'
The Python egg cache directory is currently set to:
Perhaps your account does not have write access to this directory? You can
change the cache directory by setting the PYTHON_EGG_CACHE environment
variable to point to an accessible directory.
There are a few ways to address this problem. One is to make sure to always use --always-unzip when installing eggs. Another is to create a place for www-data to store its eggs by either changing its home directory or by setting the environmental variable PYTHON_EGG_CACHE.
I decided the simplest thing to do was to simply create a new user with a proper home directory.
adduser myapp # Used a throwaway password.Once I did that, I updated the app to run as the myapp user and made sure it had access to all the directories it needed.
vipw # Set the shell to /bin/false.
Trac requires its own user. I figure it's reasonable for my app to have its own user too.