Macports définit la propriété de son répertoire site-packages Python comme root.wheel
avec des autorisations lisibles par tous. Les paquets Python installés via port install
ont les mêmes
# 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
Cela empêche bien sûr les utilisateurs individuels d'utiliser pip install pour ajouter des paquets, ce qui est tout à fait normal puisque cela devrait vraiment être fait en tant que root.
Cependant, si l'on utilise sudo ou un shell root pour pip install
, les paquets sont installés par pip
comme lisibles uniquement par root.wheel
(740).
% 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
Cela empêche mon compte utilisateur d'importer ou d'utiliser le paquet (*).
Comment puis-je faire en sorte que pip place toujours des autorisations raisonnables sur les paquets installés ?
Mise à jour (édition)
J'ai reformulé la question pour mettre en avant le fait qu'il s'agit uniquement des installations pip
. Je voudrais également souligner ici que le problème ne concerne pas le besoin de permission d'écriture pour les modules. Le problème est que les modules sont installés sans permission de lecture.
(*) Un hack pour le résoudre est de chmod a+rX
les permissions appropriées (744/755) sur les fichiers des nouveaux paquets installés
Mise à jour 2 (solution)
Comme suggéré à la fois par Mark et Ian, et confirmé lors d'un test rapide, cela a à voir avec l'umask pour root. Voici la documentation sur la manière de changer /etc/sudoers
pour OSX. Notez qu'il n'est pas forcément conseillé de changer l'umask pour toutes les instances sudo !