La instalación de pip falla con: OSError: [Errno 13] Permiso denegado en el directorio

Resuelto RunLoop asked hace 9 años • 9 respuestas

pip install -r requirements.txtfalla 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'
RunLoop avatar Jul 20 '15 15:07 RunLoop
Aceptado

En lugar de usarlo sudocon 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 sudoes 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.

bert avatar Feb 03 '2017 10:02 bert

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.

hectorcanto avatar Jul 20 '2015 09:07 hectorcanto

Está intentando instalar un paquete en la ruta de todo el sistema sin tener el permiso para hacerlo.

  1. En general, puede utilizar sudopara 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 sobre sudo aquí .

    En realidad, esta es una mala idea y no existe un buen caso de uso para ella, consulte el comentario de @wim.

  2. Si no desea realizar cambios en todo el sistema, puede instalar el paquete en su ruta por usuario usando la --userbandera.

    Todo lo que necesitas es:

     pip install --user runloop requirements.txt
    
  3. 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

Tobia Tesan avatar Jul 20 '2015 09:07 Tobia Tesan

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-virtualenvy virtualenvwrappera sudo apt-get installnivel del sistema.

Luego, dentro de entornos virtuales, use pip installsin la --userbandera Y sin sudo. Mucho más limpio, más seguro y más fácil en general.

Thom Ives avatar May 27 '2017 07:05 Thom Ives

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/
Mesut GUNES avatar Aug 16 '2017 13:08 Mesut GUNES