¿Cómo obtener los permisos de archivo correctos de las instalaciones pip de Macports?

Macports configura la propiedad de su directorio de paquetes de sitio de Python como root.wheelcon permisos de lectura mundial. Los paquetes de Python instalados a través de port installtienen 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, evita que los usuarios individuales usen pip install para agregar paquetes, lo cual está bien, ya que realmente debería hacerse como root.

Sin embargo, si uno usa sudo o un intérprete de comandos raíz para pip install, los paquetes se instalan pipcomo legibles solo 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 importe o use el paquete (*).

¿Cómo puedo hacer que pip siempre ponga permisos razonables en los paquetes instalados?

Actualizar (editar)

He reformulado la pregunta para enfatizar que se trata pipsolo de instalaciones. También me gustaría enfatizar aquí que el problema no se trata de necesitar permiso de escritura para los módulos. El problema es que los módulos se están instalando sin permisos de lectura .

(*) Un truco para solucionarlo es obtener chmod a+rXlos permisos adecuados (744/755) en los archivos del paquete recién instalado

Actualización 2 (solución)

Como lo sugirieron tanto Mark como Ian, y confirmado en una prueba rápida, esto tiene que ver con la umask para root. Aquí está la documentación sobre cómo cambiar /etc/sudoerspara OSX. Tenga en cuenta que no es necesariamente una buena idea cambiar el umask para todas las instancias de sudo.

Los permisos que ve son correctos y razonables. Si instala en cualquier lugar que no sea su directorio de inicio (por ejemplo, /opt), los archivos son para más de un usuario y, por lo tanto, los usuarios normales no deberían poder escribirlos. Para usuarios individuales, deben configurar virtualenv e instalarlo en sus virtualenvs
@Mark: si esos permisos son correctos y razonables, ¿por qué cree que difieren de los permisos de los paquetes instalados a través de port install?
Lo siento, me lo perdí: seguiría usando virtualenv y solo instalaría en los paquetes del directorio Macports instalados por Macports y no pip
¿Es esta simplemente la configuración de umask, por lo que solo puede ser leída por el usuario y el grupo y no todos (es decir, 022) ven esta pregunta SO?
También estaba empezando a preguntarme eso sobre el umask, así que lo comprobaré esta noche.
¿Alguna vez encontraste la respuesta correcta a esto? El enlace sobre /etc/sudoers en su pregunta está muerto.

Respuestas (1)

Puede usar virtualenv para crear una "copia" local de la instalación de Python que sea de su propiedad y que usted pueda manipular fácilmente. La ventaja de usar virtualenv es que puede hacer muchas copias de la misma versión de Python, pero con diferentes versiones de paquetes similares instalados, y luego alternar entre ellos con la línea de comandos de virtualenv.

Esto le permite usar diferentes versiones de bibliotecas en diferentes proyectos o bibliotecas incompatibles.

Para instalar virtualenv:

sudo pip install virtualenv

Y ahora puede usarlo usted mismo, sin sudo, para crear una pitón virtual de su propiedad:

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

Por ejemplo:

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

Puede instalar virtualenv en su ~directorio si desea que un python predeterminado que usted controle esté disponible en todo momento de la siguiente manera:

cd ~
virtualenv venv

Y ahora lo tienes ~/venv/bin/pipdisponible para ti. Puede modificar su ~/.bash_profiley agregar:

source venv/bin/activate

Justo al final, para que su virtualenv esté disponible de forma predeterminada en su shell.

Estoy de acuerdo virtualenven que es bueno (o Continuum Analytics' conda aún más), pero eso realmente responde a una pregunta diferente. Además, dudo que virtualenvpueda funcionar correctamente cuando los paquetes en cuestión no son legibles. Comprobaré eso.
Acabo de probar en Debian Linux (la máquina OSX no está disponible): virtualenvcrea un entorno sin procesar sin ninguno de los paquetes instalados, por lo que no surge el problema de los permisos. Por lo tanto, uno puede probar e instalar scipy, numpyetc. manualmente. ( condaes un poco más amigable con este tipo de cosas)
@BrianB virtualenvfunciona bien si los paquetes son de solo lectura. Sí, si necesita paquetes respaldados por bibliotecas compiladas en C, puede probar conda(que, en el fondo, se usa virtualenvsolo).
ese es mi punto. Estos paquetes están siendo instalados sin pipningún tipo de permiso de lectura. Como dices, ¡solo lectura estaría bien! (Creo que mucha gente está malinterpretando la pregunta original y creyendo que estoy preguntando sobre los permisos de escritura, así que cambiaré el énfasis).
@BrianB Entendí lo que estabas diciendo. Es un efecto secundario desafortunado de usar sudo. Puede cambiar el umaskfor roottemporalmente cuando llama sudo pip ...para que no suceda, pero realmente quiere recordar volver a cambiarlo cuando haya terminado.