How to install Python Package for global use by all users (incl. www-data)
Solution 1
I recommend that you try the solution that xotihcan posted first as that is the easy way to make most python modules available to all users including www-data. However it doesn't work for every python module. If that doesn't work for you or you just want to install modules for the www-data user only then use the following commands:
sudo mkdir /var/www/.local
sudo mkdir /var/www/.cache
sudo chown www-data.www-data /var/www/.local
sudo chown www-data.www-data /var/www/.cache
sudo -H -u www-data pip install CoolProp
I had this same issue trying to make the Python pyro4 module available for the www-data use. There is another way to do it but it involves some even dirtier hackery. For more details check out my question/answer @ How do I properly call a Python Pyro client using PHP and Apache web server?
Solution 2
Run PIP with root user.
That should fix the problem.
Florian
Updated on July 03, 2022Comments
-
Florian almost 2 years
I thought I throw together a little dirty script on our server (Ubuntu 16.04) that gives me some plain text output from Python.
I want to call the script like this from PHP (I know there should be some escaping done, but it's just a test currently):
<?php $command = '/usr/local/bin/script.py'; $output = shell_exec($command); echo $output; ?>
This is
script.py
owned by www-data mode774
#!/usr/bin/python import CoolProp.CoolProp as CP import argparse print('Hallo Welt')
If I comment out the
CoolProp
import it works. But somehow the package cannot be reached bywww-data
and so the script returns nothing.As you see I want to use the Package
CoolProp
.- So I tried installing it with
pip install CoolProp
=> That works for my local user. But now when called from userwww-data
- After I tried to install it with a target
--target=/usr/local/lib/site-packages/
but that did not help. - I tried to change the ACL on the complete
site-packages/
torwx
for www-data but that does not work as well.
In the end: What is the simplest way to
pip install
a package that can be used by all users includingwww-data
? - So I tried installing it with
-
infinigrove over 7 yearsNope, doesn't work. This might install the modules for user
root
but not anybody else. -
David Z over 7 years@infinigrove Did you try it? Because that's not how pip works. When run as root, it installs the module in the system
site-packages
directory, making it accessible to anyone using that Python installation, unless you specify the--user
option. -
infinigrove over 7 years@David Z I just tried it for the CoolProp module and my bad, in this case it does work. However, in my case for pyro4 it did NOT work. Interesting.