Macports establece la propiedad de su directorio Python site-packages como root.wheel
con permisos de lectura mundial. Los paquetes Python se instalan mediante port install
tienen el mismo
# 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
Esto, por supuesto, impide que los usuarios individuales utilicen pip install para añadir paquetes, lo cual está muy bien ya que eso realmente debería hacerse como Root.
Sin embargo, si se utiliza sudo o un intérprete de comandos Root para pip install
los paquetes se instalan mediante pip
como legible sólo por 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
Esto impide que mi cuenta de usuario pueda importar o utilizar el paquete (*).
¿Cómo puedo conseguir pip para poner siempre permisos razonables en los paquetes instalados?
Actualización (edición)
He reformulado la pregunta para hacer hincapié en que se trata de pip
sólo se instala. También me gustaría destacar aquí que el problema es no sobre la necesidad de permisos de escritura en los módulos. El problema es que los módulos se están instalando sin leer permisos.
(*) Un truco para solucionarlo es chmod a+rX
los permisos adecuados (744/755) en los archivos del paquete recién instalado
Actualización 2 (solución)
Como sugirieron tanto Mark como Ian, y confirmé en una prueba rápida, esto tiene que ver con el umask para Root. Aquí está la documentación sobre cómo cambiar /etc/sudoers
para OSX. Tenga en cuenta que no es necesariamente una buena idea cambiar la umask para todas las instancias de sudo.