Macports richtet den Besitz seines Python-Site-Packages-Verzeichnisses mit root.wheel
weltweit lesbaren Berechtigungen ein. Python-Pakete, die über installiert werden, port install
haben 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, pip
da 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 pip
nur 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+rX
die 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/sudoers
für OSX. Beachten Sie, dass es nicht unbedingt eine gute Idee ist, die umask für alle sudo-Instanzen zu ändern!
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/pip
für dich verfügbar. Sie können Ihre ändern ~/.bash_profile
und hinzufügen:
source venv/bin/activate
Ganz am Ende haben Sie Ihre virtuelle Umgebung standardmäßig in Ihrer Shell verfügbar.
virtualenv
ist nett (oder Continuum Analytics conda
noch mehr), aber das beantwortet wirklich eine andere Frage. Darüber hinaus bezweifle ich eher, dass virtualenv
es richtig funktionieren kann, wenn die betreffenden Pakete nicht lesbar sind. Ich werde das überprüfen.virtualenv
erstellt eine Rohumgebung ohne eines der installierten Pakete, sodass das Berechtigungsproblem nicht auftritt. Daher muss man versuchen scipy
, numpy
usw. manuell zu installieren. ( conda
ist etwas freundlicher bei solchen Sachen)virtualenv
funktioniert 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 virtualenv
selbst verwenden).pip
ohne 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).sudo
. umask
Sie könnten das für vorübergehend ändern, root
wenn Sie anrufen, sudo pip ...
damit es nicht passiert, aber Sie möchten wirklich daran denken, es wieder zu ändern, wenn Sie fertig sind.
mmmmmm
Brian B
port install
?mmmmmm
mmmmmm
Brian B
N. Jungfrau