A note on migrating python virtual environments
The engine that builds this blog is called Nikola it's written in Python. I write the blog and run the Nikola compiler to build the site inside a Python virtual environment.
Up until recently I was doing this work on a machine running the latest Arch Linux and Python 2.7.8, but I have recently rebuilt that machine to run Debian 8, whose default Python interpreter is currently at version 2.7.6 and I copied my virtual environments to the new OS install.
This caused me a problem with my virtual environments that manifested itself as the following error when I tried to run any Python code from within the active virtual environment:
$ pip freeze Traceback (most recent call last): File "/home/jonasg/.virtualenvs/tso/bin/pip", line 7, in <module> from pip import main File "/home/jonasg/.virtualenvs/tso/local/lib/python2.7/site-packages/pip/__init__.py", line 11, in <module> from pip.vcs import git, mercurial, subversion, bazaar # noqa File "/home/jonasg/.virtualenvs/tso/local/lib/python2.7/site-packages/pip/vcs/mercurial.py", line 9, in <module> from pip.download import path_to_url File "/home/jonasg/.virtualenvs/tso/local/lib/python2.7/site-packages/pip/download.py", line 2, in <module> import email.utils File "/usr/lib/python2.7/email/utils.py", line 32, in <module> from email._parseaddr import quote File "/usr/lib/python2.7/email/_parseaddr.py", line 16, in <module> import time, calendar File "/usr/lib/python2.7/calendar.py", line 9, in <module> import datetime ImportError: No module named datetime $ nikola build ... ImportError: No module named datetime
This happens because my virtual environments had a different version of
/usr/bin/python2.7
(the one from Arch Linux) that — unlike the new binary —
does not include the datetime
built-in, and therefore generates an error when
it cannot find it on disk anywhere. The new interpreter seems to import it
without any file I/O (try running it under strace to check).
The fix for this issue is to activate the virtual environment you are having problems with and run the following:
$ cp /usr/bin/python2.7 $(which python2.7)
There are other ways to fix this issue, but I like the one above rather than
re-initializing the virtualenv
because I use virtualenvwrapper
which does
NOT gererate the virtual environment within the present directory.
Hope this helps!
Comments
Comments powered by Disqus