Search code examples
pythonvirtualenvvirtual-environment

Search path and Python virtual environment


I am working in a virtual environment in Python 3. I need to use a 3rd party module "mglearn" and I copy it to my virtual environment's lib/:

/home/abigail/environments/my_env/lib/python3.5/site-packages/mglearn

However, in ipython command line, it can't find the module name:

In [1]: import mglearn
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-e19748f92cd9> in <module>()
----> 1 import mglearn

ImportError: No module named 'mglearn'

It should find it, right?

Then I checked my sys.path:

In [4]: print(sys.path)
['', '/usr/bin', '/usr/lib64/python35.zip', '/usr/lib64/python3.5', '/usr/lib64/python3.5/plat-linux', '/usr/lib64/python3.5/lib-dynload', '/usr/lib64/python3.5/site-packages', '/usr/lib/python3.5/site-packages', '/usr/lib/python3.5/site-packages/IPython/extensions', '/home/abigail/.ipython']

Why does sys.path only contain directories starting from the root /, not my virtual environment? How can I get that module to be searched by Python?

Edited:

[abigail@localhost bin]$ ll activate
activate       activate.csh   activate.fish  
[abigail@localhost bin]$ ./activate
bash: ./activate: Permission denied
[abigail@localhost bin]$ sudo ./activate
sudo: ./activate: command not found

Strange! why is that?


Solution

  • Generally speaking for a virtual environment you will want to do an install to get the module you are looking to import to pre-pend correctly in your path variable at virtual environment activation time. Consider trying this:

    Since it looks like you already have a virtual environment set up, and it looks like you are using some form of Unix/Linux:

    /home/abigail/environments/ $ source my_env/bin/activate
    

    You should then see your terminal look something like:

    (my_env) /home/abigail/environments
    

    that means you have an active virtual environment.

    Next you should install the module you want. I am assuming that module is available via pip install.

    (my_env) /home/abigail/environments $ pip install mglearn
    

    This should get you all set up. When you check your sys path you should now see at the front of it your virtual environement python stuffs. And your import error should go away.

    You may need to delete out the copy of mglearn you dropped into the directories manually if things get stuck.