Soy nuevo en Ubuntu, así que tengan paciencia conmigo. He instalado pip
usando este comando: sudo apt-get -y install python-pip
. Luego instalado NLTK usando el comando en su página web, que era: sudo pip install -U nltk
. Pero luego me topé con esta pregunta que dice que todo lo que hice fue una "práctica rota". La línea que más me llamó la atención fue que usar sudo pip
es inherentemente incorrecto y que dar pip
demasiada fuerza podría dañar los archivos del sistema operativo. ¿Alguien puede validar este reclamo?
Nota: solo lo usé sudo
porque cuando probé el comando apt-get -y install python-pip
me dio 2 errores:
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
package-management
permissions
python
pip
que que que
fuente
fuente
sudo pip install
son inherentemente incorrectas. - de stackoverflow.com/a/33004920/95735sudo pip install
es tan malo como lascurl "some-url" | sudo bash
instalaciones. Del mismo modo, hemos tenido algunas ocasiones en las que algunos desarrolladores solíansudo pip install
instalar alguna dependencia en su estación de trabajo, luego registraban un código roto en el repositorio porque el archivorequirements.txt
osetup.py
faltaba lo que instalaban, y todos los demás tenían que averiguar qué dependencia era necesaria mientras el chico estaba de vacaciones.Respuestas:
Ambos
sudo pip install
y su otra variante común nosudo -H pip install
deberían fomentarse porque es un riesgo de seguridad usar privilegios de root para instalar paquetes de Python desde PyPI (Python Package Index).pip
Desde https://stackoverflow.com/a/21056000/486919 (el énfasis es mío):
Como se menciona en https://security.stackexchange.com/a/79327/8761 , es importante tener en cuenta que cualquiera puede cargar paquetes de Python, incluidos los maliciosos, a PyPI.
En resumen, de acuerdo con el principio de mínimo privilegio , no utilice
sudo
conpip
instalar los paquetes de Python desde PyPI menos que sea absolutamente necesario. En lugar de eso, considere usarpip install --user
(tenga en cuenta quepip install
sinsudo
opciones / indicadores adicionales ni predeterminadospip install --user
en Ubuntu actualmente) o entornos virtuales (comovirtualenv
). Si ve a personas recomendandosudo pip
osudo -H pip
, por favor dígales que no lo hagan.fuente
sudo pip install
puede desinstalar paquetes Python "antiguos" instalados en el sistema, lo que puede dificultar la actualización o desinstalación de esos paquetes del sistema operativo.sudo pip uninstall
no ayuda aquí, porque elimina el nuevo paquete pero no restaura los archivos del anterior. (Mi colega R. Zagar entra en más detalles en otra respuesta.)Debe usar
sudo
para instalar pip con apt (sudo apt install python-pip
), pero como se indica en la respuesta de edwinksl, no debe usarsudo
para instalar paquetes con pip , debe usarpip install --user <package>
para instalar solo para su usuario, o usar un virtualenv para restringir aún más el alcance del paquete .Apt instala paquetes de los repositorios de Ubuntu, mientras que pip instala paquetes cargados por el usuario desde PyPi que podrían ser maliciosos.
fuente
Y para una respuesta más moderada:
sudo apt-get install ...
, así es como la herramienta fue diseñada para funcionar.sudo [-H]
conpip install
es posible y opcional, dependiendo de qué es exactamente lo que quiere hacer (y por lo tanto, "controversia").Uno de los lemas de Python es "Debe haber una, y preferiblemente solo una, forma obvia de hacerlo". Y como la mayoría de los lemas, está roto con alegría sardónica aparentemente en cada oportunidad posible. (Por eso existen los lemas, supongo). Desafortunadamente, en mi opinión más humilde, el ecosistema de Python consta de muchas reglas conflictivas "duras y rápidas", que nunca se romperán ... excepto cuando "yada yada yada" (diablo, detalles, etc.) En casi todos los casos, esto se debe a la evolución histórica del lenguaje y las herramientas (y quién quiere / necesita una lección de historia cuando solo quieren continuar con su trabajo), pero también puede deberse a diferencias en Mac / Win / * Plataformas Nix (por ejemplo, Unix / Linux tiene una mentalidad similar,tome todas estas "prácticas rotas" y cultistas de carga "inherentemente equivocados" con una gran pizca de sal. Algunos realmente tienen buenas intenciones. (Otros son justos, bueno, malos).
En primer lugar, en lugar de las "instalaciones por usuario" básicas, casi siempre preferirá un virtualenv, porque realmente, eso es probablemente lo que terminará necesitando. Así que bien podrías comenzar con esto ahora. Cómo se hace esto, exactamente, "depende" (ver el lema de Python, arriba). Si usa Conda (principalmente para Mac y Windows), se configurará con Conda . Si usa Python "puro" [sic] , depende de qué versión y qué utilidades de Python tenga, pero virtualenvwrapper es bastante útil.
En segundo lugar, solo como un contraejemplo a la regla de "nunca sudo", puede preferirlo
sudo -H pip install -U numpy
, lo cual está perfectamente bien, incluso es ventajoso, ya que puede permitir que uno evite descargar / reinstalar / mantener grandes bibliotecas, donde solo desea / necesita una versión, en cada virtualenv por separado. Los marcos grandes y populares como scikit-learn, NumPy, matplotlib, SciPy, pandas, etc., pueden instalarse una vez, hacerse y reutilizarse en todos los entornos . Además, su administrador de sistemas amigable local podría instalarlos para cada usuario en un sistema, y obviamente lo haríansudo
también, por ejemplo, para instalaciones más complicadas, como TensorFlow.Y, por último, si está instalando una biblioteca aleatoria de terceros que hace tal y tal cosa (API de Twitter, mezcla de texto, formato de código, etc.), estoy totalmente de acuerdo: no la instale como root a través de sudo. Claro, instálalo como tu usuario actual. Pero solo recuerde, su cuenta de usuario tiene todas sus cosas realmente importantes .
fuente
malloc
donde no lo necesite. La--user
bandera hace lo que pedía el OP y no requiere permisos especiales. Estás socavando tus puntos positivos sobre virtualenv en el proceso ... nada de "cultista de carga" sobre nada de esto.El uso de "sudo pip install" puede y sobrescribirá el contenido de Python proporcionado por su proveedor de SO. Cuando eso suceda, los paquetes de proveedores afectados por esto no pasarán un "rpm --verify" y sus paquetes parecerán estar dañados.
¿Desea utilizar las herramientas de administración del sistema que el proveedor de su sistema operativo ha probado o está bien usar componentes no probados que haya descargado de Internet?
Cuando, no si, se carga un paquete malicioso en PyPI ... las personas que usan "sudo pip install" terminarán ejecutando esa carga maliciosa con todos los privilegios del sistema. ¿Quieres eso? (#principleofleastprivilege)
Si es solo su computadora portátil, y solo está arriesgando algunas fotos de gatos, entonces el riesgo es probablemente bajo ... pero si es un sistema multiusuario, entonces el riesgo ahora se multiplica por N. Si tiene datos sobre el sistema que tiene valor, o la disponibilidad o confiabilidad del sistema tienen valor, entonces los riesgos también aumentan.
No dude en elegir su propia aventura, pero obtenga el consentimiento informado de los otros usuarios que podrían verse afectados por su elección. Es posible que no se sientan cómodos con el mismo nivel de riesgo que usted.
fuente
Para agregar a estas respuestas: No sé acerca de Ubuntu, pero en Fedora puedo usar el
sudo dnf install python3-numpy
formato para instalar MUCHOS paquetes que me son útiles. Esto no tiene la desventaja de ser inseguro (el mantenedor de repositorio de distribución ha validado los paquetes), pero también le permite instalar en todo el sistema. El único inconveniente es que las versiones de repositorio de distribución pueden retrasar ligeramente los paquetes en PyPI.fuente
No, esto es correcto. No puedo validar este reclamo. Yo siempre uso
sudo -H
conpip
.pip
solo puede dañar los archivos del sistema operativo tanto comoapt
. Solo no usesudo
conpip
cuando quiera instalar solo para ese usuario.fuente
pip
sistema? Si eres un administrador de sistemas, tal vez esa sea una historia diferente.