I would like to install the python-numpy in the Virtualenv environment. My system is Ubuntu 12.04, and my python is 2.7.5. First I installed the Virtualenv by
$ sudo apt-get install python-virtualenv
And then set up an environment by
$ mkdir myproject
$ cd myproject
$ virtualenv venv
New python executable in venv/bin/python
Installing distribute............done.
Activated it by
$ . venv/bin/activate
Installed python-numpy in the environment by
$ sudo apt-get install python-numpy
However, I tried to import numpy in python in the environment after all steps above. Python told me "No modules named numpy". Whereas, numpy could be imported in Python globally. I tried to remove and install many times but it does not work. I am a beginner of both Python and Linux.
apt-get
will still install modules globally, even when you're in your new virtualenv
.
You should either use pip install numpy
from within your virtual environment (easiest way), or else compile and install numpy
from source using the setup.py
file in the root of the source directory (slightly harder way, see here).
I'd also thoroughly recommend you take a look at virtualenvwrapper
, which makes managing virtual environments much friendlier.
Edit:
You should not be using sudo
, either to create your virtual environment or to install things within it - it's a directory in your home folder, you don't need elevated permissions to make changes to it. If you use sudo
, pip
will make changes to your global site packages, not to your virtual environment, hence why you weren't able to install numpy
locally.
Another thing to consider is that by default, new virtualenvs
will inherit from the global site-packages
- i.e. if Python can't find a module locally within your virtualenv
, Python will also look in your global site packages *. In your case, since you'd already installed numpy
globally (using apt-get
), when you then try to pip install numpy
in your virtual environment, pip
sees that numpy
is already in your Python path and doesn't install it locally.
You could:
Pass the --no-site-packages
option when you create your virtualenv
. This prevents the new virtualenv
from inheriting from the global site packages, so everything must be installed locally.
Force pip
to install/upgrade numpy
locally, e.g. using pip install -U --force numpy
* As of v1.7, the default behaviour of virtualenv
is to not include the global site-packages
directory. You can override this by passing the --system-site-packages
flag when creating a new virtual environment.
meddling with PYTHONPATH for site-packages indeed defeats the purpose of virtalenv. what worked for me was to specify the env i wanted the packages to be installed in via pip
example:
pip -E /home/proj1
where proj1
was created using virtualenv.
reference: how to install numpy in a virtualenv