it-swarm.com.de

Wie installiere ich ein Modul für alle Benutzer mit pip unter Linux?

So installieren Sie ein Paket in der Standardumgebung python d. H. /usr/local/lib/python2.7/dist-packages mit pip und dieses neue Paket für alle Benutzer verfügbar machen, ohne virtualenv zu verwenden?

Wenn Sie Folgendes verwenden, wird das Paket nur mit Root-Berechtigungen installiert:

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

Beweis:

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

Bitte raten Sie mir nicht, apt-get install python-... stattdessen. Ich würde gerne wissen, was mein Fehler ist und wie ich pip richtig benutze.

$ 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

Ich schätze, das Problem liegt daran, dass pip es der Gruppe und jedem nicht erlaubt, das installierte Material zu lesen:

$ 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

Möglicherweise haben Sie ein falsches umask gesetzt, wie beschrieben hier

Nach Ihrer letzten Bearbeitung ist umask vermutlich auf 027 Gesetzt. Versuche es

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

Mit buntu 18.04 reicht in meinem Fall die Verwendung des Befehls Sudo pip install stuff-name Nicht aus, um die Module im globalen Pfad zu installieren (es wird weiterhin der lokale Benutzer python Pfad).

Lösung in meinem Fall

Ich habe zum root-Benutzer gewechselt und das Verzeichnis zu seiner Startseite geändert. Dann hat die Installation von pip wie erwartet funktioniert und installiert die Module im globalen Pfad.

Im Detail folgte ich der nowox Antwort mit einer geringfügigen Änderung (Sudo su, Änderungen an der Wurzel Benutzer), siehe auch den letzten Hinweis zu umask 022:

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

Hinweis: umask 022 Befehl/Zeile kann optional sein ... normalerweise ist umask bereits 022, das ist die Standardeinstellung.

12
Fabiano Tarlao

Verwenden Sie die Option --target, Wenn Sie pip aufrufen

pip install --target=/your/pyinstalldir loremipsum

Das Zielverzeichnis muss ein von Ihrem Benutzer beschreibbarer Speicherort sein.

Beachten Sie, dass dies voraussetzt, dass in der normalen Benutzerumgebung das Zielverzeichnis in sys.path Vorhanden ist. Eine Möglichkeit, dies zu erreichen, ist die Verwendung von PYTHONPATH env var:

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