Is it possible? When installing pip
, install the python packages inside my $HOME
folder. (for example, I want to install mercurial
, using pip
, but inside $HOME
instead of /usr/local
)
I'm with a mac machine and just thought about this possibility, instead of "polluting" my /usr/local
, I would use my $HOME
instead.
PEP370 is exactly about this. Is just creating a ˜/.local
and do a pip install package
enough to make these packages to be installed only at my $HOME folder?
$ python setup.py --user install
. And it worked. Package is now installed at home subdir and all works as expected. Will have to talk to my server admin.
wget https://bootstrap.pypa.io/get-pip.py
followed by python get-pip.py
and you're good to go. Might be useful if you're on a machine where the installed PIP is too old (was the case for me). See pip.readthedocs.org/en/latest/installing.html for more info.
While you can use a virtualenv
, you don't need to. The trick is passing the PEP370 --user
argument to the setup.py
script. With the latest version of pip
, one way to do it is:
pip install --user mercurial
This should result in the hg
script being installed in $HOME/.local/bin/hg
and the rest of the hg package in $HOME/.local/lib/pythonx.y/site-packages/
.
Note, that the above is true for Python 2.6. There has been a bit of controversy among the Python core developers about what is the appropriate directory location on Mac OS X for PEP370-style user
installations. In Python 2.7 and 3.2, the location on Mac OS X was changed from $HOME/.local
to $HOME/Library/Python
. This might change in a future release. But, for now, on 2.7 (and 3.2, if hg
were supported on Python 3), the above locations will be $HOME/Library/Python/x.y/bin/hg
and $HOME/Library/Python/x.y/lib/python/site-packages
.
I would use virtualenv at your HOME directory.
$ sudo easy_install -U virtualenv
$ cd ~
$ virtualenv .
$ bin/pip ...
You could then also alter ~/.(login|profile|bash_profile)
, whichever is right for your shell to add ~/bin to your PATH and then that pip|python|easy_install
would be the one used by default.
virtualenv venv
, source venv/bin/activate
. You might not necessarily want to always use your virtualenv, and by using this method, your prompt is prefixed with (venv)
when you're using it.
You can specify the -t
option (--target
) to specify the destination directory. See pip install --help
for detailed information. This is the command you need:
pip install -t path_to_your_home package-name
for example, for installing say mxnet, in my $HOME
directory, I type:
pip install -t /home/foivos/ mxnet
distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base
. What does it mean?
Short answer to your two questions grabbed from the other answers
One
Yes
it is possible installing pip packages to $HOME instead of /usr/local/lib/, but
Two
mkdir ˜/.local # then
pip install package
is not enough.
You need
pip install package --user
and the packages get installed to
/home/user/.local/lib/python3.x/site-packages
Exception when you do not need --user
if you are not root user
On Debian together with Wsl - Windows Subsystem Linux no notice
On Ubuntu 20.04 notice default to user installation because normal site-packages not writeable - default config is /usr/lib not writeable for other users except root
Success story sharing
easy_install
comes installed in Mac OS X by default, so I would have only pip installed outside the$HOME
folder..local
will always be hit first which can lead to very hard to track down import errors.export PATH=$PATH:~/Library/Python/X.Y/bin/
.