I know the obvious answer is to use virtualenv and virtualenvwrapper, but for various reasons I can't/don't want to do that.

So how do I modify the command

pip install package_name

to make pip install the package somewhere other than the default site-packages?

Peter Mortensen's user avatar

asked May 26, 2010 at 17:55

Monika Sulik's user avatar

Monika SulikMonika Sulik

17.1k15 gold badges52 silver badges52 bronze badges

8

The --target switch is the thing you're looking for:

pip install --target d:\somewhere\other\than\the\default package_name

But you still need to add d:\somewhere\other\than\the\default to PYTHONPATH to actually use them from that location.

-t, --target <dir>
Install packages into <dir>. By default this will not replace existing files/folders in <dir>.
Use --upgrade to replace existing packages in <dir> with new versions.


Upgrade pip if target switch is not available:

On Linux or OS X:

pip install -U pip

On Windows (this works around an issue):

python -m pip install -U pip

Niko Fohr's user avatar

Niko Fohr

32.4k11 gold badges105 silver badges111 bronze badges

answered Oct 16, 2013 at 13:10

Janusz Skonieczny's user avatar

Janusz SkoniecznyJanusz Skonieczny

18.7k11 gold badges57 silver badges64 bronze badges

28

Use:

pip install --install-option="--prefix=$PREFIX_PATH" package_name

You might also want to use --ignore-installed to force all dependencies to be reinstalled using this new prefix. You can use --install-option to multiple times to add any of the options you can use with python setup.py install (--prefix is probably what you want, but there are a bunch more options you could use).

answered May 26, 2010 at 19:59

Ian Bicking's user avatar

Ian BickingIan Bicking

9,8826 gold badges35 silver badges33 bronze badges

17

Instead of the --target or --install-options options, I have found that setting the PYTHONUSERBASE environment variable works well (from discussion on a bug regarding this very thing):

PYTHONUSERBASE=/path/to/install/to pip install --user

(Or set the PYTHONUSERBASE directory in your environment before running the command, using export PYTHONUSERBASE=/path/to/install/to)

This uses the very useful --user option but tells it to make the bin, lib, share and other directories you'd expect under a custom prefix rather than $HOME/.local.

Then you can add this to your PATH, PYTHONPATH and other variables as you would a normal installation directory.

Note that you may also need to specify the --upgrade and --ignore-installed options if any packages upon which this depends require newer versions to be installed in the PYTHONUSERBASE directory, to override the system-provided versions.

A full example

PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy

..to install the scipy and numpy package most recent versions into a directory which you can then include in your PYTHONPATH like so (using bash and for python 2.6 on CentOS 6 for this example):

export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH

Using virtualenv is still a better and neater solution!

Cristian Ciupitu's user avatar

answered Mar 17, 2015 at 15:24

David Gardner's user avatar

David GardnerDavid Gardner

7,5474 gold badges37 silver badges37 bronze badges

13

Installing a Python package often only includes some pure Python files. If the package includes data, scripts and or executables, these are installed in different directories from the pure Python files.

Assuming your package has no data/scripts/executables, and that you want your Python files to go into /python/packages/package_name (and not some subdirectory a few levels below /python/packages as when using --prefix), you can use the one time command:

pip install --install-option="--install-purelib=/python/packages" package_name

If you want all (or most) of your packages to go there, you can edit your ~/.pip/pip.conf to include:

[install]
install-option=--install-purelib=/python/packages

That way you can't forget about having to specify it again and again.

Any excecutables/data/scripts included in the package will still go to their default places unless you specify addition install options (--prefix/--install-data/--install-scripts, etc., for details look at the custom installation options).

Peter Mortensen's user avatar

answered Jun 13, 2012 at 14:39

Anthon's user avatar

AnthonAnthon

75.1k34 gold badges200 silver badges271 bronze badges

2

Tested these options with python3.5 and pip 9.0.3:

pip install --target /myfolder [packages]

Installs ALL packages including dependencies under /myfolder. Does not take into account that dependent packages are already installed elsewhere in Python. You will find packages from /myfolder/[package_name]. In case you have multiple Python versions, this doesn't take that into account (no Python version in package folder name).

pip install --prefix /myfolder [packages]

Checks if dependencies are already installed. Will install packages into /myfolder/lib/python3.5/site-packages/[packages]

pip install --root /myfolder [packages]

Checks dependencies like --prefix but install location will be /myfolder/usr/local/lib/python3.5/site-packages/[package_name].

pip install --user [packages]

Will install packages into $HOME: /home/[USER]/.local/lib/python3.5/site-packages Python searches automatically from this .local path so you don't need to put it to your PYTHONPATH.

=> In most of the cases --user is the best option to use. In case home folder can't be used because of some reason then --prefix.

Seppo Enarvi's user avatar

Seppo Enarvi

3,5253 gold badges35 silver badges26 bronze badges

answered Dec 20, 2018 at 14:06

Mikko's user avatar

MikkoMikko

1,0099 silver badges5 bronze badges

4

Nobody seems to have mentioned the -t option but that the easiest:

pip install -t <direct directory> <package>

answered Feb 20, 2018 at 0:02

Erwan's user avatar

ErwanErwan

3,73131 silver badges25 bronze badges

1

pip install packageName -t pathOfDirectory

or

pip install packageName --target pathOfDirectorty

Zoe - Save the data dump's user avatar

answered Feb 22, 2019 at 8:35

kundan kaushik's user avatar

1

Just add one point to @Ian Bicking's answer:

Using the --user option to specify the installed directory also work if one wants to install some Python package into one's home directory (without sudo user right) on remote server.

E.g.,

pip install --user python-memcached

The command will install the package into one of the directories that listed in your PYTHONPATH.

ohmu's user avatar

ohmu

19.5k42 gold badges111 silver badges147 bronze badges

answered Dec 23, 2014 at 19:46

Good Fit's user avatar

Good FitGood Fit

1,29817 silver badges10 bronze badges

Newer versions of pip (8 or later) can directly use the --prefix option:

pip install --prefix=$PREFIX_PATH package_name

where $PREFIX_PATH is the installation prefix where lib, bin and other top-level folders are placed.

answered May 24, 2017 at 6:37

Mike T's user avatar

Mike TMike T

43k18 gold badges162 silver badges210 bronze badges

To add to the already good advice, as I had an issue installing IPython when I didn't have write permissions to /usr/local.

pip uses distutils to do its install and this thread discusses how that can cause a problem as it relies on the sys.prefix setting.

My issue happened when the IPython install tried to write to '/usr/local/share/man/man1' with Permission denied. As the install failed it didn't seem to write the IPython files in the bin directory.

Using "--user" worked and the files were written to ~/.local. Adding ~/.local/bin to the $PATH meant I could use "ipython" from there.

However I'm trying to install this for a number of users and had been given write permission to the /usr/local/lib/python2.7 directory. I created a "bin" directory under there and set directives for distutils:

vim ~/.pydistutils.cfg

[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin

then (-I is used to force the install despite previous failures/.local install):

pip install -I ipython

Then I added /usr/local/lib/python2.7/bin to $PATH.

I thought I'd include this in case anyone else has similar issues on a machine they don't have sudo access to.

Peter Mortensen's user avatar

answered May 29, 2015 at 14:24

Stuart Brock's user avatar

Stuart BrockStuart Brock

3,8441 gold badge23 silver badges21 bronze badges

If you are using brew with python, unfortunately, pip/pip3 ships with very limited options. You do not have --install-option, --target, --user options as mentioned above.

Note on pip install --user
The normal pip install --user is disabled for brewed Python. This is because of a bug in distutils, because Homebrew writes a distutils.cfg which sets the package prefix. A possible workaround (which puts executable scripts in ~/Library/Python/./bin) is: python -m pip install --user --install-option="--prefix=" <package-name>

You might find this line very cumbersome. I suggest use pyenv for management. If you are using

brew upgrade python python3

Ironically you are actually downgrade pip functionality.

(I post this answer, simply because pip in my mac osx does not have --target option, and I have spent hours fixing it)

answered Sep 17, 2018 at 13:22

anonymous's user avatar

anonymousanonymous

1,4722 gold badges19 silver badges22 bronze badges

1

pip install /path/to/package/

is now possible.

The difference with this and using the -e or --editable flag is that -e links to where the package is saved (i.e. your downloads folder), rather than installing it into your python path.

This means if you delete/move the package to another folder, you won't be able to use it.

answered Jan 18, 2019 at 8:37

A H's user avatar

A HA H

2,4642 gold badges23 silver badges41 bronze badges

2

With pip v1.5.6 on Python v2.7.3 (GNU/Linux), option --root allows to specify a global installation prefix, (apparently) irrespective of specific package's options. Try f.i.,

$ pip install --root=/alternative/prefix/path package_name

answered Aug 18, 2014 at 14:53

sphakka's user avatar

sphakkasphakka

4895 silver badges12 bronze badges

I suggest to follow the documentation and create ~/.pip/pip.conf file. Note in the documentation there are missing specified header directory, which leads to following error:

error: install-base or install-platbase supplied, but installation scheme is incomplete

The full working content of conf file is:

[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data

Unfortunatelly I can install, but when try to uninstall pip tells me there is no such package for uninstallation process.... so something is still wrong but the package goes to its predefined location.

answered Dec 5, 2017 at 10:57

Ladislav Zitka's user avatar

system` option, that will install pip package-bins to /usr/local/bin thats accessible to all users. Installing without this option may not work for all users as things go to user specific dir like $HOME/.local/bin and then it is user specific install which has to be repeated for all users, also there can be path issues if not set for users, then bins won't work. So if you are looking for all users - yu need to have sudo access:

sudo su - 
python3 -m pip install --system <module>
logout
log back in 
which <module-bin> --> it should be installed on /usr/local/bin/

answered Mar 17, 2021 at 13:50

ashish's user avatar

ashishashish

4494 silver badges8 bronze badges

Sometimes it works only works with Cache argument

-m pip install -U pip --target=C:\xxx\python\lib\site-packages Pillow --cache-dir C:\tmp

answered Dec 29, 2022 at 10:47

dazzafact's user avatar

dazzafactdazzafact

2,7943 gold badges32 silver badges51 bronze badges

Use:

pip install package_name -t directory_path

If you get the following error:

ERROR: Can not combine '--user' and '--target'

Use:

pip install package_name -t directory_path --no-user

e.g. pip install pandas -t C:\Users\user\Desktop\Family\test --no-user

answered Nov 19, 2023 at 6:32

Vaibhav Kabdwal's user avatar

use default venv, third party vitrualenv or virtualenvwrapper will be pain in future

answered May 6, 2023 at 8:18

shyed2001's user avatar

1