tospo
tospo

Reputation: 718

Python pip: install in specific non-user directory and ignore system wide packages

I want to set up a Python environment for a whole team and I don't have root access to the server.

I have done a similar thing with Perl and expected to be able to do this for Python in a similar way but I keep running into a problem.

Basically, I want to be able to install a package into /SOME/DIR on the system while ignoring any system wide versions of that package. However, when I run

pip install --install-option="--prefix=/SOME/DIR/" --up --ignore-installed SOME-MODULE

I keep getting a "permission denied" error because pip keeps trying to remove system-wide packages when upgrading. What does work is this

pip install --user --up --ignore-installed SOME-MODULE

Which does not try to touch the system-wide packages but it installs the module into a directory in $HOME/.lib, which is not what I need.

It seems impossible to combine --user and a "--prefix" option, so it sems that I can either install into an arbitrary path but then get conflicts with already install system-wide packages or install into my home directory. Neither of them are what I need. For now I have been using the --user option and then moved the installed files across to /SOME/DIR which works but seems odd.

Am I missing something? I have read up on virtualenv but this also doesn't quite sound like what I need. Thanks for your help!

Upvotes: 5

Views: 5394

Answers (2)

fghoussen
fghoussen

Reputation: 565

I had a similar problem (permission denied + no root access), --build option made it work: pip install --install-option="--prefix=/path/to/local/lib" --build=/tmp wget

Upvotes: 0

user3467349
user3467349

Reputation: 3191

Note that --install-options is passed directly to the packages setup.py install command - this requires the installation directory to be in your python path. add it to your PYTHONPATH i.e.
set -gx PYTHONPATH $PYTHONPATH '/home/user/temp/lib/python3.4/site-packages'

and run pip

pip install django==1.6 --ignore-installed --install-options="--prefix=/home/user/temp"

Mostly this is a pain in the ass if you have to do this for each library (note that you will still have potential conflicts with imports if you want to use certain standard libraries from the default site-packages dir, and others from your custom dir). And the best choice is probably, as the comment says, to install virtualenv and virtualenvwrapper

Upvotes: 2

Related Questions