How do I install a pip package globally instead of locally?
Asked Answered
P

7

190

I am trying to install flake8 package using pip3 and it seems that it refuses to install because is already installed in one local location.

How can I force it to install globally (system level)?

pip3 install flake8
Requirement already satisfied (use --upgrade to upgrade): flake8 in ./.local/lib/python3.4/site-packages

Please note that I would prefer a generic solution (that should work on Debian, OS X maybe even Windows), one that should be used on any platform so I don't want to specify the destination myself.

For some weird reason it behaves like I already specified --user which in my case I didn't.

The only way I was able to install a package globally was to first remove it and install it again after this. Somehow it seems that pip (8.1.1) refuses to install a package globally if it exists locally.

Disclaimer: No virtual environments were used or harmed during the experiments.

Pampuch answered 29/4, 2016 at 10:41 Comment(4)
Have you tried from root user or sudo?Nessy
Have you tried pip install flake8 --upgrade?Giffard
In case of similar issues related w/ the usage of virtual environments (venv) use --system-site-packages option to inherit globally installed packages into your venv. See https://mcmap.net/q/121821/-how-to-install-python-dev-dependencies-globally-so-that-i-don-39-t-have-to-reinstall-them-in-every-venvOrthochromatic
I combined solution of both Aaj Kaal and Emma, first start a cmd line in Windows with Administrator permission then doing "pip install --force-reinstall flake8", it reached the goal under the scenario describe by sorin, but it is on Windows.Mccarter
P
228

Why don't you try sudo with the H flag? This should do the trick.

sudo -H pip install flake8

A regular sudo pip install flake8 will try to use your own home directory. The -H instructs it to use the system's home directory. More info at https://stackoverflow.com/a/43623102/

Predestination answered 27/12, 2016 at 21:26 Comment(8)
H as in Hlobal?Prurient
-H as in hey sudo, stop using my home directory. use your own Home directory instead stackoverflow.com/a/43623102Predestination
This doesn't really install it globally, but instead seems to just store it in the user 'root''s home directorySibelius
@Predestination I don't understand how this is different than pip3 install ipython when virtualenv is deactivated, they seem to install to same site-packages directory.Sere
@Sibelius for me it does the trick and install the packages into /usr/local/lib/python3.8/dist-packages where I meant them toBarbey
@Barbey I don't know if that is desired. Using python -m venv env_path actually pulls pip from /usr/lib/python3/dist-packages and not local.Lecythus
I had to install a package for the plpython3u extension of PostgreSQL. I needed to use sudo, but I did not use -H (I have not tested it), and I obviously also did not need -H to get the extension to find the package.Pledge
sudo pip install is probably a bad practiceIrresoluble
P
19

Maybe --force-reinstall would work, otherwise --ignore-installed should do the trick.

Pent answered 29/4, 2016 at 10:53 Comment(0)
B
12

For windows 10:

Installing Python for all users is straight forward since when you install you have to click a checkbox for all users.

In order to install modules globally under C:\Program Files\Python310\Lib\site-packages start CMD prompt as administrator and then install modules

python -m pip install selenium
Beltane answered 7/2, 2022 at 1:1 Comment(0)
F
9

Where does pip installations happen in python?

I will give a windows solution which I was facing and took a while to solve.

First of all, in windows (I will be taking Windows as the OS here), if you do pip install <package_name>, it will be by default installed globally (if you have not activated a virtual enviroment). Once you activate a virtual enviroment and you are inside it, all pip installations will be inside that virtual enviroment.


pip is installing the said packages but not I cannot use them?

For this pip might be giving you a warning that the pip executables like pip3.exe, pip.exe are not on your path variable. For this you might add this path ( usually - C:\Users\<your_username>\AppData\Roaming\Programs\Python\ ) to your enviromental variables. After this restart your cmd, and now try to use your installed python package. It should work now.

Flats answered 30/8, 2020 at 10:42 Comment(0)
G
5

For the Windows case:

Are you using virtualenv? If yes, deactivate the virtualenv. If you are not using a venv, the package should have already be installed on system level (system-wide). In that case, try to upgrade the package.

pip install flake8 --upgrade
Giffard answered 29/4, 2016 at 11:44 Comment(2)
Not quite true.Murmuration
It is a problem of the question not being put clearly on purpose (it asks for a "generic" solution that holds at best on all operating systems). On Linux, this answer is just wrong: if you do not use sudo in front of pip install, it will be installed in the .local directory, then this answer would be wrong. On Windows, it should be right.Pledge
S
1

I actually don‘t see your issue. Globally is any package which is in your python3 path‘s site package folder.

If you want to use it just locally then you must configure a virtualenv and reinstall the packages with an activated virtual environment.

Scrivener answered 13/6, 2019 at 8:30 Comment(4)
When creating a venv you can use --system-site-packages .venv/dev to inherit global packages so you don't have to reinstall them in each venv. This make sense for packages that one may want to use in any project, i.e. black, flake8, pytest. Example: python -m venv --system-site-packages .venv/devOrthochromatic
I think they're referring to the fact that it is installed in a .local directory. I encounter the same issue on Windows, where it incorrectly installs to c:\users\username\appdata\roaming\python\python39\site-packages instead of c:\program files\python39\lib\site-packages. I think this happens because of insufficient permission, but once installed, it refuses to install to the global directory, even after it has sufficient permission.Osteoma
@Osteoma The first part about the .local is understood. The second part might be right on Windows, I have not tested it. On Linux instead, but once installed, it refuses to install to the global directory, even after it has sufficient permission is wrong, I have tested it: first I installed without sudo to .local, that is, locally. Then with sudo, and it installed globally. The local installation did not block the global installation.Pledge
"Globally" means it should run for any user, not just the current one.Emplane
O
0

Sorry for digging up the topic but there is a multiple issues which we could face on Windows OS.

  1. Lack of privileges in Python location for current user
  2. User AppData/Python location has not been added to PATH
  3. Package was installed with --user flag

How to really resolve these issues:

  1. Open your Python location and click Properties -> Security -> Edit
  2. Click Add... and add the "Users" group or alternatively add your current user which uses Python. Set checkbox "Full control"
  3. Change windows variables and in PATH add C:\Users\your_username>\AppData\Roaming\Programs<Python Version>\ This allow you to install packages for current user instead of globally
Overdose answered 16/6, 2023 at 6:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.