2 votos

¿Cómo obtener permisos de archivo correctos de Macports pip instala?

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.

2voto

shsteimer Puntos 8749

Puede utilizar virtualenv para crear una "copia" local de la instalación de Python que sea de tu propiedad y fácilmente manipulable por ti. La ventaja de usar virtualenv es que puedes hacer muchas copias de la misma versión de Python, pero con diferentes versiones de paquetes similares instalados, y luego cambiar entre ellos con la línea de comandos virtualenv.

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

Para instalar virtualenv:

sudo pip install virtualenv

Y ahora puedes usarlo tú mismo, sin sudo, para crear una Python 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

Puede virtualenv-install en su ~ si quieres que un Python por defecto que tú controles esté disponible en todo momento de esta forma:

cd ~
virtualenv venv

Y ahora tienes ~/venv/bin/pip a su disposición. Puede modificar su ~/.bash_profile y añade:

source venv/bin/activate

justo al final para que tu virtualenv esté disponible por defecto en tu shell.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X