web-dev-qa-db-fra.com

Comment installer un module pour tous les utilisateurs avec pip sur linux?

Comment installer un paquet dans l’environnement standard python ), c.-à-d. /usr/local/lib/python2.7/dist-packages en utilisant pip et rendre ce nouveau paquet disponible pour tous les utilisateurs sans utiliser virtualenv?

En utilisant les éléments suivants, le package est installé avec les autorisations root uniquement:

$ Sudo pip install loremipsum
Downloading/unpacking loremipsum
  Downloading loremipsum-1.0.5.tar.gz
  Running setup.py (path:/tmp/pip_build_root/loremipsum/setup.py) 
  Egg_info for package loremipsum

Installing collected packages: loremipsum
  Running setup.py install for loremipsum

Successfully installed loremipsum
Cleaning up...

Preuve:

$ python -c 'import loremipsum'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named loremipsum

$ Sudo python -c 'import loremipsum'

$ pip install loremipsum
Requirement already satisfied (use --upgrade to upgrade): loremipsum in 
/usr/local/lib/python2.7/dist-packages
Cleaning up...

$ cowsay sad
 _____
< sad >
 -----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

S'il vous plaît ne me conseillez pas d'utiliser apt-get install python-... au lieu. Je voudrais savoir quelle est mon erreur et comment utiliser correctement pip.

$ python --version
Python 2.7.6
$ pip --version
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)
$ uname -a
Linux _ 3.19.0-32-generic #37~14.04.1-Ubuntu SMP _ x86_64 GNU/Linux

EDIT

Je suppose que le problème vient du fait que pip ne permet pas au groupe et à tout le monde de lire les éléments installés:

$ Sudo pip uninstall loremipsum
Uninstalling loremipsum:
  /usr/local/lib/python2.7/dist-packages/loremipsum-1.0.5.Egg-info
  /usr/local/lib/python2.7/dist-packages/loremipsum/__init__.py
  /usr/local/lib/python2.7/dist-packages/loremipsum/__init__.pyc
  /usr/local/lib/python2.7/dist-packages/loremipsum/default/dictionary.txt
  /usr/local/lib/python2.7/dist-packages/loremipsum/default/sample.txt
  /usr/local/lib/python2.7/dist-packages/loremipsum/generator.py
  /usr/local/lib/python2.7/dist-packages/loremipsum/generator.pyc
Proceed (y/n)? y
  Successfully uninstalled loremipsum

$ Sudo pip install loremipsum
Downloading/unpacking loremipsum
  Downloading loremipsum-1.0.5.tar.gz
  Running setup.py (path:/tmp/pip_build_root/loremipsum/setup.py) Egg_info for package loremipsum

Installing collected packages: loremipsum
  Running setup.py install for loremipsum

Successfully installed loremipsum
Cleaning up...
$ Sudo ls -al /usr/local/lib/python2.7/dist-packages/loremipsum
total 60
drwxr-s---  3 root staff  4096 Apr 27 22:06 .
drwxrwsr-x 18 root staff  4096 Apr 27 22:06 ..
drwxr-s---  2 root staff  4096 Apr 27 22:06 default
-rw-r-----  1 root staff 16182 Apr 27 22:06 generator.py
-rw-r-----  1 root staff 16323 Apr 27 22:06 generator.pyc
-rw-r-----  1 root staff  6130 Apr 27 22:06 __init__.py
-rw-r-----  1 root staff  6869 Apr 27 22:06 __init__.pyc
23
nowox

Vous pourriez avoir un mauvais umask set comme indiqué ici

Depuis votre dernière modification, je suppose que vous umask est défini sur 027. Essaye de faire

Sudo pip uninstall loremipsum
umask 022
Sudo pip install loremipsum
26
nowox

Avec buntu 18.04, en utilisant la commande Sudo pip install stuff-name ne suffit pas, dans mon cas, pour installer les modules dans le chemin global (il cherche toujours le chemin de l’utilisateur local python)).

Solution dans mon cas

J'ai changé pour l'utilisateur root et j'ai changé de répertoire pour son répertoire personnel. Ensuite, pip installation a fonctionné comme prévu et installe les modules dans le chemin global.

En détail, j'ai suivi la réponse nowox avec une modification mineure (Sudo su, modifications apportées à l’utilisateur root ), voir aussi la note finale sur umask 022:

Sudo su
cd ~
umask 022
pip install what-you-like

Remarque: umask 022 commande/ligne peut être facultatif ..., généralement umask vaut déjà 022, valeur par défaut.

12
Fabiano Tarlao

Utilisez le --target option lorsque vous appelez pip

pip install --target=/your/pyinstalldir loremipsum

Le répertoire cible doit être un emplacement accessible en écriture pour votre utilisateur.

Notez que cela nécessite que l’environnement utilisateur normal ait le répertoire cible présent dans le répertoire sys.path. Une façon d'y parvenir est d'utiliser le PYTHONPATH env var:

# /etc/profile.d/myenvvars.sh
export PYTHONPATH=/your/pyinstalldir
6
wim