comando linux encontrado pero no encontrado al usar sudo

11

Estoy tratando de ejecutar una instalación de python3 como esta:

pip3 install django

Me sale el error:

PermissionError: [Errno 13] Permiso denegado: '/usr/local/lib/python3.6/site-packages/pytz'

Luego intento:

sudo pip3 install django

Me sale el error:

sudo: pip3: comando no encontrado

Así es como se ve mi $ PATH:

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin

¿Cómo puedo obtener acceso de sudo a pip3?

petey
fuente

Respuestas:

9

Sudo no utiliza lo mismo PATHque su usuario actual por razones de seguridad. En /etc/sudoershay una opción secure_pathque especifica la ruta utilizada al ejecutar comandos con sudo. El mío se ve así:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

Desde la página de manual de sudo:

 secure_path   Path used for every command run from sudo.  If you don't trust the people running sudo to have a sane PATH environment
               variable you may want to use this.  Another use is if you want to have the “root path” be separate from the “user path”.
               Users in the group specified by the exempt_group option are not affected by secure_path.  This option is not set by
               default.

El pip3comando probablemente no está en la ruta definida por el sudoersarchivo. Puede agregar la ruta secure_patho proporcionar la ruta completa al pip3comando de esta manera:

sudo /path/to/pip3 install django
Mal Torbalan
fuente
1

Es posible que sudo no conserve su variable $ PATH al usarla. Trate de usar la ruta completa al binario PIP3 en el comando, por ejemplo: sudo /path/to/pip3 install django. Si no está seguro del camino completo, hágalo which pip3.

Safado
fuente
qué salidas pip3: / usr / local / bin / pip3. La variable $ PATH también se ve bien: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2- usuario / bin
petey
¿ sudo echo $PATHproduce algo diferente? ¿Intentó el comando con la ruta completa a pip3? ¿Alguna diferencia en los resultados?
Safado
sudo genera lo mismo: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
petey
0

Siempre puedes hacer:

sudo env "PATH=$PATH" pip3 install django

Como se menciona en esta respuesta .

Alexander Tolkachev
fuente
0

Emití la instalación de django de esta manera:

pip3 install --user django

Esto solucionó el problema.

petey
fuente