Reputation: 141
I'm trying to setup my environment for a project but python isn't able to find the modules I've installed with pip.
I did the following:
mkdir helloTwitter
cd helloTwitter
virtualenv myenv
Installing setuptools, pip, wheel...done.
source myenv/bin/activate
pip install tweepy
Collecting tweepy
Using cached tweepy-3.5.0-py2.py3-none-any.whl
Collecting six>=1.7.3 (from tweepy)
Using cached six-1.10.0-py2.py3-none-any.whl
Collecting requests>=2.4.3 (from tweepy)
Using cached requests-2.11.1-py2.py3-none-any.whl
Collecting requests-oauthlib>=0.4.1 (from tweepy)
Using cached requests_oauthlib-0.6.2-py2.py3-none-any.whl
Collecting oauthlib>=0.6.2 (from requests-oauthlib>=0.4.1->tweepy)
Installing collected packages: six, requests, oauthlib, requests-oauthlib, tweepy
Successfully installed oauthlib-2.0.0 requests-2.11.1 requests-oauthlib-0.6.2 six-1.10.0 tweepy-3.5.0
When I try to import the module it says it cannot be found.
The first entry in $PATH is helloTwitter/myenv/bin
All the packages are showing up in the environments site-packages directory.
I seem to be using the right python and pip.
Which python outputs helloTwitter/myenv/bin/python
Which pip outputs helloTwitter/myenv/bin/pip
Any advice on where I'm going wrong?
Upvotes: 4
Views: 39039
Reputation: 1785
It may simply depend on your run command. Did you use "py" or "python"? The .venv\Scripts directory contains python.exe but not py.
Upvotes: 0
Reputation: 1
I solved this problem by change project directory. Move your project directory from desktop to another place. It helped me on Windows. I moved it from /Desktop to C:/some_folder
Upvotes: 0
Reputation: 726
On Windows, if you are experiencing this issue, check that after activating your environment, the subsequent python
commands are being run using the binary in the .venv\Scripts\Python
executable.
I've seen this strange behaviour where even after the environment is activated using the activate.bat
file in the virtual environment, AND the path to the Scripts\
directory is added to the system path, python
commands still use the binary in the central Python installation in the system.
This leads to any packages being installed being installed NOT in the virtual environment, but in the global system location.
To work around this, when running pip
or python
commands after activating your environment, specify the correct path to the executable within your virtual environment, i.e.,
.venv\Scripts\python -m pip install setup.py
This should install the packages into the virtual environment and solve the issue.
Upvotes: 2
Reputation: 141
Ok, I think I found a solution, if not an answer.
--no-cache-dir
option. The packages install successfully. Now Python can find the package.derptop:environmentScience Marcus$ python
>>> from tweepy import StreamListener
>>> StreamListener
<class tweepy.streaming.StreamListener'>
I checked the sys.path
and it now includes the site-packages
directory from the virtual environment, where previously it was absent.
Output of sys.path
:
['', ....'/Users/Marcus/CodeProjects/environmentScience/myenv/lib/python2.7/site-packages']
As far as I can tell the sys.path
was referencing the wrong site packages directory. Though I'm not sure why. I'm wondering if pips use of the cache was causing the site-packages reference to reset to system.
Upvotes: 3
Reputation: 61
It looks like you're manually setting your $PATH
to point to your virtual environment. The whole point of the myenv/bin/activate
script is to take care of this for you.
Once you have activated your virtual environment, any package you install using pip will be placed in the relevant venv site-packages
directory (in your case, myenv/lib/python2.7/site-packages
). Things like pip --user
are unnecessary when you are working in a virtual environment (assuming default behaviour). It's all automatic.
After running activate
, you can check the python binary you are using with find -iname tweepy
.
Aliases can cause issues too. which
is an external command, and won't always pick these up. A type -a python
will flush these out.
A quick test can be done by running helloTwitter/myenv/bin/python -c 'import tweepy'
directly. If this behaves differently to however you are currently running python (i.e. doesn't throw an import exception), then this is your problem.
Hope that helps.
Upvotes: 5