How to install a module for all users with pip on linux?
You might have a wrong umask
set as discussed here
From your last edit, I guess you umask
is set to 027
. Try to do
sudo pip uninstall loremipsum
umask 022
sudo pip install loremipsum
Pip3 Install Module For All Users
I suspect that your startup scripts are launching a different Python than the one you have installed discord to.
Try adding the line,
import sys; print(sys.executable, sys.prefix)
to your main.py
, before the import discord
. And also try running that in your python3
shell. This should print off where the Python executable and standard library are installed, respectively. If they're different in main.py
than in the shell, that's your issue.
Also try
$ which python3
$ which pip3
Once you know the path to the Python executable you're actually running, you can use that Python's pip with
$ foo -m pip install discord
where foo
is the full path to the Python executable you printed off with sys.executable
in your main.py
.
You can also try installing discord
to a virtual environment.
$ python3 -m venv foo
$ source foo/bin/activate
$ pip install discord # install all your other requirements too
where foo
is some path you can install the virtual environment to. Then in your launch script, do the source activate before running main.py
. This ensures that python will run in the same foo
environment you just created.
#!/bin/bash
source foo/bin/activate
python /home/ubuntu/discordBot/main.py
Note that in an active virtual environment, you use python
and pip
even if you created the environment with python3
.
Install a python package for all users without messing with the system python installation
No, you can never be too afraid of modifying the system Python. Your caution is justified.
I’d suggest you let all users share a global (but non-system) Python installation, either from the official distribution, Anaconda, pyenv’s python-build, or self-compiled source. Each user can then either perform their own pip install --user
to their respective home directories, or you can, as an sudoer, install tools globally available to them, into the custom-managed, non-system, but global Python.
Edit: I forgot to mention that you may also do this with virtual environments and symlinks. An example for Pipenv (you can change paths as you prefer):
python3 -m venv /opt/venvs/pipenv
/opt/venvs/pipenv/bin/pip install pipenv
ln -s /opt/venvs/pipenv/bin/pipenv /opt/bin/pipenv
python3 -m venv /opt/venvs/flake8
/opt/venvs/pipenv/bin/pip install flake8
ln -s /opt/venvs/pipenv/bin/flake8 /opt/bin/flake8
This way to can install multiple tools without them affecting each other. Also you can combine this with custom-managed Python for even more peace of mind.
Can I use pip install to install a module for another users?
Running pip
with sudo
should install a package for all users
sudo pip install numpy
If it doesn't work, try
sudo -H -u www-data pip install --user numpy
which should install numpy only for www-data
Make Python module available for all Linux users
Ok, I solved the issue.
In my case, the problematic module was "faker". But, when we install the faker, another additional module is installed as well (in this case - text-unidecode).
Then I uninstalled both modules, ran "umask 022" and re-installed the faker.
This solved the issue for all other users.
Thanks all for the help!
What is the purpose of "pip install --user ..."?
pip defaults to installing Python packages to a system directory (such as /usr/local/lib/python3.4
). This requires root access.
--user
makes pip install packages in your home directory instead, which doesn't require any special privileges.
Related Topics
Pandas Get the Most Frequent Values of a Column
How to Run Python Script from Another Machine Without Installing Imported Modules
How to Normalize a Numpy Array to Within a Certain Range
Django: Check Whether an Object Already Exists Before Adding
Pandas Dataframe Calculations With Previous Row
Convert Regular Python String to Raw String
Loading and Parsing a Json File With Multiple Json Objects
How to Concatenate/Append Multiple Spark Dataframes Column Wise in Pyspark
Possible to Loop Through Excel Files With Differently Named Sheets, and Import into a List
Easiest Way to Replace a String Using a Dictionary of Replacements
Convert a Tensor to Numpy Array in Tensorflow
The Right Way to Limit Maximum Number of Threads Running At Once
How to Detect and Remove Outliers from Each Column of Pandas Dataframe At One Go
How to Send Email to Multiple Recipients Using Python Smtplib
Using Condition to Split Pandas Column of Lists into Multiple Columns.