On my system, I have several modules installed multiple times. To give an example, numpy 1.6.1
is installed in the standard path at /usr/lib/python2.7/dist-packages
, and I have an updated version of numpy 1.8.0
installed at /local/python/lib/python2.7/site-packages/
.
The reason I cannot simply remove the old version is that I do not have permissions to change anything on my work computer. I however need to use the new numpy version.
I have added /local/python/lib/python2.7/site-packages/
to my PYTHONPATH
. Unfortunately, this does not help, since /usr/lib/python2.7/dist-packages
is inserted into the path first and therefore, numpy 1.6.1
will be loaded. Here's an example:
>>> import os >>> print os.environ['PYTHONPATH'] /local/python/lib/python2.7/site-packages >>> import pprint >>> import sys >>> pprint.pprint(sys.path) ['', '/local/python/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg', '/local/python/lib/python2.7/site-packages/pyparsing-2.0.1-py2.7.egg', '~/.local/lib/python2.7/site-packages/setuptools-3.4.4-py2.7.egg', '~/.local/lib/python2.7/site-packages/mpldatacursor-0.5_dev-py2.7.egg', '/usr/lib/python2.7/dist-packages', '/local/python/lib/python2.7/site-packages', '/usr/lib/python2.7', ..., '~/.local/lib/python2.7/dist-packages', ...]
So, it seems that the import order is
PYTHONPATH
~/.local/lib/python2.7/site-packages/*.egg
)~/usr/lib/python2.7/dist-packages/
)PYTHONPATH
~/.local/lib/python2.7/site-packages/
)My problem is that I would need to put item 5. before items 3. and 4. for my code to work properly. Right now, if I import a module that was compiled against numpy 1.8.0
from the /local/*
directory, and this module imports numpy, it will still take numpy from the /usr/*
directory and fail.
I have circumvented this problem by placing something like this in my scripts:
import sys sys.path.insert(0, '/local/python/lib/python2.7/site-packages/')
Thereby I can force Python to use the right import order, but of course this is not a solution, since I would have to do this in every single script.
To install a specific version of a Python package you can use pip: pip install YourPackage==YourVersion . For example, if you want to install an older version of Pandas you can do as follows: pip install pandas==1.1. 3 .
easy_install allows simultaneous installation of different versions of the same project into a single environment shared by multiple programs which must require the appropriate version of the project at run time (using pkg_resources ).
There's nothing wrong with having two versions of python installed, and it's actually quite common to do so. Usually, one would install them with different names ( python vs python3 , for example) to avoid confusion though.
Besides the suggestions already given in the comment section, have you thought about using virtualenv? This would give you fine-grained control over every module that you want to use. If you're not familiar with virtualenv you'll want to read the documentation to get a feel for how it works.
Purely for example, you could install and set it up, like so (virtualenv-1.11.6 looks to be the most recent version currently):
$ curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.6.tar.gz $ tar xvfz virtualenv-1.11.6.tar.gz $ cd virtualenv-1.11.6 $ python virtualenv.py ../numpyvenv $ cd ../numpyvenv $ source ./bin/activate (numpyvenv) $ pip install numpy # downloads, compiles, and installs numpy into the virtual environemnt (numpyvenv) $ python Type "help", "copyright", "credits" or "license" for more information. >>> import numpy >>> numpy.version.version '1.9.1' >>> quit() (numpyvenv) $ deactivate $ # the virtual environment has been deactivated
Above, we created a virtual environment named "numpyvenv", activated the environment, installed numpy, printed the numpy version (to show it works), quit python, and deactivated the environment. Next time you activate the environment, numpy will be there along with whatever other modules you install. You may run into hiccups while trying this, but it should get you started.
I had this problem on a Mac I was using without administrator access. My solution was the following:
Find the directory of the numpy version you want to use. For me this was /Library/Python/2.7/site-packages
Create a file ~/.startup.py
and point to it with PYTHONSTARTUP=~/.startup.py
in your .bashrc file
In .startup.py
:
import sys
sys.path.insert(0,'/Library/Python/2.7/site-packages/')
<--- imports this BEFORE the standard parts
import numpy
print("Importing numpy version"+numpy.__version__)
<---- To remind that we have changed the numpy version
This seems to work fine for me. I hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With