Search code examples
pythonmacosscipyvirtualenvvirtualenvwrapper

add2virtualenv (virtualenv wrapper) does not work with scipy


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?


Solution

  • 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.