user697911 user697911 - 5 days ago 5
Python Question

Search path and Python virtual environment

I am working in a virtual environment in Python 3.I need to use a 3 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?

Answer

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.

Comments