Wie erhalte ich die richtigen Dateiberechtigungen von Macports Pip-Installationen?

Macports richtet den Besitz seines Python-Site-Packages-Verzeichnisses mit root.wheelweltweit lesbaren Berechtigungen ein. Python-Pakete, die über installiert werden, port installhaben dasselbe

# ls -l -d /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
drwxr-xr-x  151 root  wheel  5134 Mar  8 10:56 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

Dies verhindert natürlich, dass einzelne Benutzer pip install zum Hinzufügen von Paketen verwenden, was in Ordnung ist, da dies eigentlich als Root erfolgen sollte.

Wenn man jedoch sudo oder eine Root-Shell verwendet pip install, werden die Pakete von installiert, pipda sie nur von root.wheel(740) gelesen werden können.

% sudo pip install BeautifulSoup
...
% ls -l -d   /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/BeautifulSoup.py
-rw-r-----  1 root  wheel  79567 Mar  8 11:09 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/BeautifulSoup.py

Dies hindert mein Benutzerkonto daran, das Paket tatsächlich zu importieren oder zu verwenden (*).

Wie kann ich Pip dazu bringen , installierten Paketen immer angemessene Berechtigungen zu erteilen?

Aktualisieren (bearbeiten)

Ich habe die Frage umformuliert, um zu betonen, dass es pipnur um Installationen geht. Ich möchte hier auch betonen, dass es nicht darum geht, Schreibrechte auf die Module zu benötigen. Das Problem ist, dass die Module ohne Leserechte installiert werden .

(*) Ein Hack, um das Problem zu beheben, ist chmod a+rXdie richtigen Berechtigungen (744/755) für die neu installierten Paketdateien

Update 2 (Lösung)

Wie von Mark und Ian vorgeschlagen und in einem Schnelltest bestätigt, hat dies mit der umask für root zu tun. Hier ist die Dokumentation zum Wechseln /etc/sudoersfür OSX. Beachten Sie, dass es nicht unbedingt eine gute Idee ist, die umask für alle sudo-Instanzen zu ändern!

Die angezeigten Berechtigungen sind korrekt und angemessen. Wenn Sie irgendwo anders als in Ihrem Home-Verzeichnis (z. B./g//opt) installieren, sind die Dateien für mehr als einen Benutzer und sollten daher nicht von normalen Benutzern beschreibbar sein. Für einzelne Benutzer sollten sie virtualenv einrichten und in ihren virtualenvs installieren
@Mark: Wenn diese Berechtigungen sowohl korrekt als auch angemessen sind, warum unterscheiden sie sich dann Ihrer Meinung nach von den Berechtigungen für Pakete, die über installiert wurden port install?
Tut mir leid, dass ich das verpasst habe - ich würde immer noch virtualenv verwenden und nur von Macports installierte Pakete im Macports-Verzeichnis installieren und nicht pip
Ist dies einfach die umask-Einstellung, also nur von Benutzer und Gruppe lesbar und nicht alle (dh 022 ) sehen diese SO-Frage
Ich fing an, mich das auch über die umask zu fragen, also werde ich heute Abend nachsehen.
Hast du jemals die richtige Antwort darauf herausgefunden? Der Link zu /etc/sudoers in Ihrer Frage ist tot.

Antworten (1)

Sie können virtualenv verwenden , um eine lokale „Kopie“ der Python-Installation zu erstellen, die Ihnen gehört und von Ihnen leicht manipuliert werden kann. Der Vorteil der Verwendung von virtualenv besteht darin, dass Sie viele Kopien derselben Version von Python erstellen können, jedoch mit verschiedenen Versionen ähnlicher Pakete, die installiert sind, und dann mit der virtualenv-Befehlszeile zwischen ihnen wechseln können.

Dadurch können Sie verschiedene Versionen von Bibliotheken in verschiedenen Projekten oder inkompatible Bibliotheken verwenden.

So installieren Sie virtualenv:

sudo pip install virtualenv

Und jetzt können Sie es selbst ohne sudo verwenden, um eine virtuelle Python zu erstellen, die Ihnen gehört:

mkdir -p ~/Development/mypythonproject
cd ~/Development/mypythonproject
virtualenv .venv
source .venv/bin/activate

Zum Beispiel:

IanCsiMac:~/Development/keybase-python |ruby-2.1.2| [git::develop]
> which python
/usr/local/bin/python

IanCsiMac:~/Development/keybase-python |ruby-2.1.2| [git::develop]
> source .venv/bin/activate

(.venv)
IanCsiMac:~/Development/keybase-python |ruby-2.1.2| [git::develop]
> which python
/Users/ian/code/keybase-python/.venv/bin/python

(.venv)
IanCsiMac:~/Development/keybase-python |ruby-2.1.2| [git::develop]
> deactivate

IanCsiMac:~/Development/keybase-python |ruby-2.1.2| [git::develop]
> which python
/usr/local/bin/python

Sie können in Ihrem Verzeichnis virtualenv-installieren, ~wenn Sie möchten, dass eine von Ihnen kontrollierte Standard-Python jederzeit verfügbar ist:

cd ~
virtualenv venv

Und jetzt hast du ~/venv/bin/pipfür dich verfügbar. Sie können Ihre ändern ~/.bash_profileund hinzufügen:

source venv/bin/activate

Ganz am Ende haben Sie Ihre virtuelle Umgebung standardmäßig in Ihrer Shell verfügbar.

Ich stimme zu, virtualenvist nett (oder Continuum Analytics conda noch mehr), aber das beantwortet wirklich eine andere Frage. Darüber hinaus bezweifle ich eher, dass virtualenves richtig funktionieren kann, wenn die betreffenden Pakete nicht lesbar sind. Ich werde das überprüfen.
Ich habe gerade auf Debian Linux getestet (OSX-Rechner ist nicht zur Hand) - virtualenverstellt eine Rohumgebung ohne eines der installierten Pakete, sodass das Berechtigungsproblem nicht auftritt. Daher muss man versuchen scipy, numpyusw. manuell zu installieren. ( condaist etwas freundlicher bei solchen Sachen)
@BrianB virtualenvfunktioniert einwandfrei, wenn die Pakete schreibgeschützt sind. Ja, wenn Sie Pakete benötigen, die von C-kompilierten Bibliotheken unterstützt werden, können Sie es versuchen conda(die sich unter der Haube virtualenvselbst verwenden).
das ist irgendwie mein Punkt. Diese Pakete werden von pipohne jegliche Leseberechtigung installiert. Wie Sie sagen, nur lesen wäre in Ordnung! (Ich denke, viele Leute lesen die ursprüngliche Frage falsch und glauben, dass ich nach Schreibberechtigungen frage, also werde ich die Betonung ändern).
@BrianB Ich habe verstanden, was du gesagt hast. Es ist ein unglücklicher Nebeneffekt der Verwendung von sudo. umaskSie könnten das für vorübergehend ändern, rootwenn Sie anrufen, sudo pip ...damit es nicht passiert, aber Sie möchten wirklich daran denken, es wieder zu ändern, wenn Sie fertig sind.