One way to get around this is the create the env with the --no-site-packages flag and then manually add the global packages that I want using the virtualenvwrapper command add2virtualenv.
Since the env was already setup, I looked for ways to add that flag after the repo was created. Here is the answer. To have virtualenv not use global libs, just add the file "no-global-site-packages.txt" to the path: virtualenv_name/lib/python2.5 - Note this path is different from the one given on stackoverflow. I figured out the path by creating a test virtualenv and seeing where that file turned up.
But that's not really what I want to do. I want to have my env access the global paths because there are a lot of useful libs in there. It would be a lot of work manually adding each to the virtualenv.
Part of the answer seems to be in the pth files. It turns out that when you install a package in the virtual env using easy_install, easy_install creates a .pth file that removes versions of that package that are already on the path.
A quick peak in easy-install.pth reveals lines of code in addition to the paths! Here it is:
import sys; sys.__plen = len(sys.path)./setuptools-0.6c11-py2.5.egg./pip-0.7.2-py2.5.eggimport sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
I found more info on this magic here. Apparently if you start a line with import and put all the code after it on the same line using ";" as a delimiter, then you can hack the path at startup.
No comments:
Post a Comment