La instalación de pip falla con: OSError: [Errno 13] Permiso denegado en el directorio
pip install -r requirements.txt
falla con la excepción siguiente OSError: [Errno 13] Permission denied: '/usr/local/lib/...
. ¿Qué pasa y cómo lo soluciono? (Estoy intentando configurar Django )
Installing collected packages: amqp, anyjson, arrow, beautifulsoup4, billiard, boto, braintree, celery, cffi, cryptography, Django, django-bower, django-braces, django-celery, django-crispy-forms, django-debug-toolbar, django-disqus, django-embed-video, django-filter, django-merchant, django-pagination, django-payments, django-storages, django-vote, django-wysiwyg-redactor, easy-thumbnails, enum34, gnureadline, idna, ipaddress, ipython, kombu, mock, names, ndg-httpsclient, Pillow, pyasn1, pycparser, pycrypto, PyJWT, pyOpenSSL, python-dateutil, pytz, requests, six, sqlparse, stripe, suds-jurko
Cleaning up...
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 283, in run
requirement_set.install(install_options, global_options, root=options.root_path)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1436, in install
requirement.install(install_options, global_options, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 672, in install
self.move_wheel_files(self.source_dir, root=root)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 902, in move_wheel_files
pycompile=self.pycompile,
File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 206, in move_wheel_files
clobber(source, lib_dir, True)
File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 193, in clobber
os.makedirs(destsubdir)
File "/usr/lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/amqp-1.4.6.dist-info'
En lugar de usarlo sudo
con pip install
, es mejor intentarlo primero pip install --user
. Si esto falla, eche un vistazo a la publicación principal aquí .
La razón por la que no deberías usarlo sudo
es la siguiente:
Cuando ejecuta pip con sudo
, está ejecutando código Python arbitrario desde Internet como usuario root, lo cual representa un riesgo de seguridad bastante grande. Si alguien coloca un proyecto malicioso en PyPI y usted lo instala, le da al atacante acceso raíz a su máquina.
Opción a) Crear un virtualenv, activarlo e instalar:
virtualenv .venv
source .venv/bin/activate
pip install -r requirements.txt
Opción b) Instalar en su directorio de inicio:
pip install --user -r requirements.txt
Mi recomendación es utilizar la opción segura (a), para que los requisitos de este proyecto no interfieran con los requisitos de otros proyectos.
Está intentando instalar un paquete en la ruta de todo el sistema sin tener el permiso para hacerlo.
En general, puede utilizarsudo
para obtener temporalmente permisos de superusuario bajo su responsabilidad para poder instalar el paquete en la ruta de todo el sistema:sudo pip install -r requirements.txt
Encuentre más sobresudo
aquí .En realidad, esta es una mala idea y no existe un buen caso de uso para ella, consulte el comentario de @wim.
Si no desea realizar cambios en todo el sistema, puede instalar el paquete en su ruta por usuario usando la
--user
bandera.Todo lo que necesitas es:
pip install --user runloop requirements.txt
Finalmente, para un control aún más detallado , también puede usar virtualenv , que podría ser la solución superior para un entorno de desarrollo, especialmente si está trabajando en múltiples proyectos y desea realizar un seguimiento de las dependencias de cada uno.
Después de activar su virtualenv con
$ my-virtualenv/bin/activate
El siguiente comando instalará el paquete dentro de virtualenv (y no en la ruta de todo el sistema):
pip install -r requirements.txt
Solo aclaro lo que funcionó para mí después de mucho dolor en Linux (basado en Ubuntu) por errores de permiso denegado, y aprovechando la respuesta anterior de Bert, ahora uso...
$ pip install --user <package-name>
o si ejecuta pip en un archivo de requisitos...
$ pip install --user -r requirements.txt
y funcionan de manera confiable para cada instalación de pip, incluida la creación de entornos virtuales.
Sin embargo, la solución más limpia en mi experiencia posterior ha sido instalar python-virtualenv
y virtualenvwrapper
a sudo apt-get install
nivel del sistema.
Luego, dentro de entornos virtuales, use pip install
sin la --user
bandera Y sin sudo
. Mucho más limpio, más seguro y más fácil en general.
El usuario no tiene permiso de escritura para algunas rutas de instalación de Python. Puedes dar el permiso mediante:
sudo chown -R $USER /absolute/path/to/directory
Entonces deberías dar permiso, luego intentar instalarlo nuevamente, si tienes nuevas rutas también deberías dar permiso:
sudo chown -R $USER /usr/local/lib/python2.7/