add2virtualenv (virtualenv wrapper) does not work

2019-02-22 07:47发布

问题:

I want to create a virtualenv without global python packages, but with the scipy distribution that is shared; installing scipy takes quite a while and I don't want to go through the motions too often.

So I run add2virtualenv /Library/Python/2.7/site-packages/scipy and after running add2virtualenv it shows the directory is added. (I doublechecked, it is the right directory). Then I issue workon myfile to be sure the working directories are reloaded. However, when I try to load scipy, it is an ImportError: No module named scipy. This is unexpected.

Has anyone used a global scipy in a non-global-sitepackages virtualenv?

回答1:

So, to summarize, the actual problem here is that the directory including the packages to be imported must be used, instead of the specific package. That is, instead of

add2virtualenv /Library/Python/2.7/site-packages/scipy

It should be

add2virtualenv /Library/Python/2.7/site-packages

Beware: this solution has the drawback that you do not only include scipy, but any other packages in /Library/Python/2.7/site-packages.


An alternate, space-efficent solution could be symlinking scipy directory inside the virtual env's site-package. This can be done, in your virtual env, through:

cdsitepackages
ln -s /Library/Python/2.7/site-packages/scipy scipy

All credits go to @rubik (see the comments)

Check out this answer to find your site-packages path in case it is different than the one used here.