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 instalados 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
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 pip
como 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 pip
solo 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+rX
los 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/sudoers
para OSX. Tenga en cuenta que no es necesariamente una buena idea cambiar el umask para todas las instancias de sudo.
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/pip
disponible para ti. Puede modificar su ~/.bash_profile
y agregar:
source venv/bin/activate
Justo al final, para que su virtualenv esté disponible de forma predeterminada en su shell.
virtualenv
en que es bueno (o Continuum Analytics' conda
aún más), pero eso realmente responde a una pregunta diferente. Además, dudo que virtualenv
pueda funcionar correctamente cuando los paquetes en cuestión no son legibles. Comprobaré eso.virtualenv
crea 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
, numpy
etc. manualmente. ( conda
es un poco más amigable con este tipo de cosas)virtualenv
funciona 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 virtualenv
solo).pip
ningú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).sudo
. Puede cambiar el umask
for root
temporalmente cuando llama sudo pip ...
para que no suceda, pero realmente quiere recordar volver a cambiarlo cuando haya terminado.
mmmmmm
Brian B.
port install
?mmmmmm
mmmmmm
Brian B.
N. Virgo