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

2

Macports configura la propiedad de su directorio de paquetes de sitio de Python como root.wheel con permisos de lectura mundial. Los paquetes de Python instantáneamente a través de 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

Por supuesto, esto evita que los usuarios individuales utilicen pip install para agregar paquetes, lo cual está bien ya que realmente debería hacerse como root.

Sin embargo, si se usa sudo o un shell raíz para pip install , los paquetes se instalan con pip como legibles solo con 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 realmente importe o use el paquete (*).

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

Actualizar (editar)

He reescrito la pregunta para enfatizar que solo se trata de pip de instalaciones. También me gustaría enfatizar aquí que el problema no es sobre la necesidad de permiso de escritura para los módulos. El problema es que los módulos se están instalando sin los permisos leer .

(*) Un truco para solucionarlo es chmod a+rX de los permisos adecuados (744/755) en los archivos de paquetes recién instalados

Actualización 2 (solución)

Según lo sugerido por Mark e Ian, y confirmado en una prueba rápida, esto tiene que ver con el umask para la raíz. Aquí está la documentación sobre cómo cambiar /etc/sudoers para OSX. Tenga en cuenta que no es necesariamente una buena idea cambiar el umask para todas las instancias de sudo.

    
pregunta Brian B 08.03.2015 - 17:19

1 respuesta

2

Puede usar virtualenv para crear una "copia" local de la instalación de Python que sea de su propiedad y que 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 instaladas, y luego alternar entre ellas con la línea de comandos virtualenv.

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

Para instalar virtualenv:

sudo pip install virtualenv

Y ahora puedes usarlo tú mismo, sin sudo, para crear una pitón virtual de tu 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

Puedes instalar virtualenv en tu directorio ~ si quieres que un python predeterminado que controlas esté disponible en todo momento, como así:

cd ~
virtualenv venv

Y ahora tienes ~/venv/bin/pip disponible para ti. Puedes modificar tu ~/.bash_profile y agregar:

source venv/bin/activate

Al final de este, para tener tu virtualenv disponible por defecto en tu shell.

    
respondido por el Ian C. 08.03.2015 - 18:32

Lea otras preguntas en las etiquetas