Wie installiere ich Python mit den richtigen Berechtigungen?

7

Also Python wahrscheinlich gut installiert. Oder vielleicht war es schon hier (ich benutze xubuntu 12.10).

Aber ich habe heute versucht, networkx mit pip zu installieren:

pip install networkx

dann sagt ich habe keine erlaubnis. Also sudo ich den obigen Befehl. Wird ohne Fehler installiert.

Jetzt kann ich networkx nicht importieren, ohne root zu sein. Ich bin mir ziemlich sicher, dass Sie nicht die ganze Zeit root sein müssen, um Python-Skripte auszuführen. Das klingt wirklich gefährlich.

easy_install sagt dies:

easy_install networkx

Fehler: Dateien im Installationsverzeichnis können nicht erstellt oder entfernt werden

Beim Versuch, Dateien im Installationsverzeichnis hinzuzufügen oder zu entfernen, ist der folgende Fehler aufgetreten:

[Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/test-easy-install-13206.pth'

Das von Ihnen angegebene Installationsverzeichnis (über --install-dir, --prefix oder die Standardeinstellung von distutils) war:

/usr/local/lib/python2.7/dist-packages/

Möglicherweise hat Ihr Konto keinen Schreibzugriff auf dieses Verzeichnis? Wenn es sich bei dem Installationsverzeichnis um ein systemeigenes Verzeichnis handelt, müssen Sie sich möglicherweise als Administrator oder "Root" -Konto anmelden. Wenn Sie keinen Administratorzugriff auf diesen Computer haben, möchten Sie möglicherweise ein anderes Installationsverzeichnis auswählen, vorzugsweise eines, das in Ihrer PYTHONPATH-Umgebungsvariablen aufgeführt ist.

Informationen zu anderen Optionen finden Sie in der Dokumentation unter:

http://packages.python.org/distribute/easy_install.html

Bitte nehmen Sie die entsprechenden Änderungen für Ihr System vor und versuchen Sie es erneut.

Ich habe auch versucht, in ~ / .networkx (einem Unterordner, den ich als Nicht-Root erstellt habe) zu installieren, und erhalte den gleichen Berechtigungsfehler. Ich chmod 777 /usr/local/lib/python2.7/dist-packages und versuche zu installieren, gleiche Berechtigungsfehler.

pip uninstall und sudo easy_install verursachen dieselben Probleme wie die pip-Installation.

was übrigens ist:

python t1.py

Traceback (letzter Aufruf zuletzt): Datei "t1.py", Zeile 3, in import networkx als nx importError: Kein Modul mit dem Namen networkx

sudo python t1.py

H: 10 ... mehr Zeug, das anzeigt, dass es importiert und gut funktioniert ...

Klar, ich war irgendwann nur ein Noob bei der Installation von Python oder ... irgendwo anders. Ich weiß nicht wo, es könnte überall sein. Hat jemand dies schon einmal erlebt oder ist er ahnungslos genug, um zu wissen, was los ist? Ich brauche deinen Halp. Prost.

EDIT: (Mehr Infos für Radoo)

sean@potatocake:~$./sh.sh
User is not part of the group which has access to that directory.
/usr/local/lib/python2.7/dist-packages needs access.

sean@potatocake:~$ll /usr/local/lib/
total 12
drwxrwxr-x 3 root root  4096 Mar 28 19:00 perl
drwxrwsr-x 4 root staff 4096 Oct 18 04:07 python2.7
drwxrwsr-x 3 root staff 4096 Oct 18 04:05 python3.2

sean@potatocake:~$ll /usr/local/lib/python2.7/
total 8
drwxrwsr-x 32 root staff 4096 Mar 28 23:13 dist-packages
drwxrwsr-x  2 root staff 4096 Oct 18 04:07 site-packages

Hinweis: Ich habe dies auf 775 zurückgesetzt, als ein Nicht-Sudo-Pip immer noch nicht funktionierte.

sean@potatocake:~$groups
sean adm cdrom sudo dip plugdev lpadmin sambashare

sean@potatocake:~$sudo useradd -G staff sean
useradd: user 'sean' already exists
Ninjamario
quelle
Welchen Fehler erhalten Sie beim Importieren?
Terdon
python t1.py Traceback (letzter Aufruf zuletzt): Datei "t1.py", Zeile 3, in import networkx als nx ImportError: Kein Modul namens networkx
ninjamario
Tut mir leid, ich kann das nicht hübsch machen. Wenn Sie oben im ursprünglichen Beitrag schauen, ist es dort schön unter den Ergebnissen für 'Python t1.py'
Prost
Sind Sie sicher, dass Sie die richtige Python verwenden? Was kommt type pythonzurück?
user2313067
Können Sie versuchen - pip install --user <pkg-name> pkg-name = networkx
Deepak

Antworten:

1

Versuchen Sie am besten nicht, die Python-Version des Systems zu überschreiben. Diese Version ist für das System da. Die Anpassung an Python des Systems kann zu Konflikten führen oder Ihr System sogar für Sicherheitslücken öffnen. Außerdem werden Systemaktualisierungen wahrscheinlich Ihre Anpassung zurücksetzen.

Verwenden Sie am besten Ihre eigene Python-Version, die mit Tools wie virtualenv oder pyenv ausgeführt werden kann .

Trittsicher
quelle
0

Ich bin definitiv kein Experte in diesem Bereich, aber hier sind meine Gedanken.

Es ist gut, Ihre Installation als root zu haben, damit niemand Ihre Dateien und Konfigurationen ändern kann, außer root und sudoers. Ich denke, Ihre Installation ist in Ordnung. Wenn Sie ein neues Paket installieren möchten, sollten Sie root sein.

In Bezug auf den Berechtigungsfehler haben Sie Folgendes gesagt : chmod 777 /usr/local/lib/python2.7/dist-packages. Nun, dies bietet am Ende nur Zugriff auf dieses Verzeichnis. Möglicherweise verfügen Sie über einige übergeordnete Verzeichnisse, die möglicherweise keine Zugriffsberechtigungen (Ausführungsrechte) haben, was zu Ihrem Problem führen kann.

Um die Berechtigungen für den aktuellen Benutzer in all diesen Verzeichnissen zu überprüfen, müssen Sie für jedes dieser Verzeichnisse Folgendes tun (ich denke, Sie können aber trotzdem eine bessere Version finden):

dir="<directory_path>"
user_groups=$(groups <user>)
dir_group=$(stat "$dir" | cut -d' ' -f6)

if ! [[ "$dir_group" =~ "\\b$user_groups\\b" ]]; then printf "User is not part of the group which has access to that directory.\n"; fi

dir_access=$(stat "$dir" | cut -d' ' -f3)
group_dir_exec_access=${dir_access:6:1}

if [ "$group_dir_exec_access" != "x" ]; then printf "This dir needs access.\n"; <add some sudo chmod stuff to give access to group> fi

Ich hoffe das hilft.

Karel
quelle
Vielen Dank für die schnelle Antwort. Es tut mir leid, dass ich eine Weile gebraucht habe, um mich bei Ihnen zu melden (Schlaf, dann ein ganzer Tag = P). Ich habe eine Reihe von (hoffentlich) relevanten Befehlsausgaben in einen Bearbeitungsabschnitt oben eingefügt. Ihr Skript ist übrigens sh.sh, falls Sie Ihren eigenen
Druckinhalt
Hoppla, nur zum Zeilenumbruch gedacht, keinen Kommentar abgeben. Wenn ich also ein neues Paket installieren möchte, sollte ich root sein? In diesem Fall sollte die Berechtigungssache 775 richtig sein. Oder vielleicht sogar weniger. 755. Unabhängig davon kann ich das Paket problemlos installieren, wenn ich es sudo, aber dann kann ich das Paket nur importieren, wenn Python als root ausgeführt wird. Wie kann ich networkx meinem normalen Benutzer (sean) zur Verfügung stellen?
Ninjamario
Ich habe Ihren printf-Kommentar nicht erhalten, aber trotzdem sollte die networkx-Datei Lese- und Ausführungsrechte für die Gruppe haben, und sean sollte in dieser Gruppe sein.
-1

Ich hatte das gleiche Problem bei der Installation von Buildozer . Ich habe folgende Befehle ausgeführt und es hat bei mir funktioniert. Versuchen:

  1. Wechseln Sie in das Verzeichnis Python2.7
  2. sudo chmod 777 dist-packages
  3. sudo chmod 777 etc
  4. und dann python2.7 setup.py install

Es hat bei mir funktioniert!

Aman Sehgal
quelle
3
-1 Die blinde Verwendung von chmod 777(= drwxrwxrwx) ist eine sehr schlechte Idee, insbesondere in den oben genannten Verzeichnissen, da dies jedem Benutzer die Schreibberechtigung (last win drwxrwxrwx) für sie geben würde. Auch Gruppenschreiben (zweiter win drwxrwxrwx) sollte nicht gegeben werden. Es ist besser, nur Lese- und Ausführungsberechtigungen für dist-Pakete von zu erteilen chmod o+r,o+X dist-packages.
Sithsu
Wenn Sie verwenden müssen, sudogehen Sie direkt mit sudo -H pip install <whatever>und kommen Sie damit fertig. Das macht keinen Sinn. Wie @Sithsu betont, ist es 777sowieso eine schlechte Idee , Berechtigungen für irgendetwas zu haben.
Atmosx