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
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
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.
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