apt-get install python-xxx vs pip install

8

Todavía estoy tratando de entender este problema que tengo y he leído un montón de publicaciones sobre sudo apt-get install python-XXXvs pip install, y entiendo la esencia de esto (apt-get es un repositorio de paquetes, administrado por un grupo completamente diferente de personas para hacer pip, auto -actualiza junto con todo lo demás cuando hay una actualización disponible, es binaria, etc.). Sin embargo, hay algunas cosas particulares que no entiendo y que no he podido encontrar respuestas:

  1. Si, por alguna razón, primero instalo un paquete, por ejemplo, numpy, with sudo apt-get install numpy, y luego lo hago pip install numpy. ¿Lo que pasa? ¿Numpy está instalado nuevamente en otro lugar con una versión diferente (por ejemplo, en .local / lib), así que ahora tengo dos versiones independientes? ¿Cuál se usa cuando importo? (si he entendido correctamente, está separado y apt-get está en todo el sistema, pero he visto respuestas contradictorias a esta pregunta, por ejemplo, aquí )

  2. Noté que muchos de los paquetes en apt-get son bastante antiguos en comparación con pip. por ejemplo, al momento de escribir ipython 2.3.0 vs 4.0.3, numpy 1.10.2 vs 1.10.4, spyder 2.3.5 vs 2.3.8. ¿Hay alguna ventaja al primero sudo apt-get installseguido de a pip install? o eso es estúpido?

  3. Me di cuenta de que mi pip era 1.5.6, es la última versión actual si lo haces sudo apt-get install python-pip. mientras que en pip es 8.0.2! Creo que esto me ha estado causando problemas, porque con esa versión anterior puedes instalar el mismo paquete una y otra vez y no avisa. Y de alguna manera no escribe sobre el viejo. Me di cuenta de esto porque puedo seguir desinstalando el mismo paquete (por ejemplo, numpy) y siempre está ahí cuando lo hago pip show numpy. Y curiosamente, siempre muestra la misma carpeta (.local /), pero con diferentes versiones: S Entonces tengo dos preguntas relacionadas con esto:

    a. ¿Cuál es la mejor manera de instalar pip? Actualmente me estoy inclinando hacia sudo apt-get install python-pip, pip install pip, sudo apt-get purge python-pip. ¿Eso es sabio? Me parece un poco ridículo.

    si. ahora que sé que muchos de mis paquetes están en mal estado con instalaciones duplicadas, probablemente porque algunos se instalaron con apt-get y luego varias veces con pip 1.5.6, ¿cuál es la mejor manera de verificar si hay duplicados y limpiarlo? Supongo que no es seguro usar un script para desinstalar todo y volver a instalar.

PD: No estaba seguro de si debería publicar esto como una nueva pregunta o como respuesta a mi problema original. Como esta pregunta es mucho más concisa y general, sentí que sería mejor separarla. Disculpas si me equivoqué.

memorándum
fuente
Posible duplicado de apt get install vs pip install
muru
Realmente hago referencia a esa publicación en mi pregunta, fue muy útil para aclarar mucha de mi confusión, pero no responde a mis preguntas anteriores (al menos no pude verla)
memorando
Oh, en tu otra pregunta. Acabo de mirar la lista de publicaciones vinculadas y no la vi allí.
muru

Respuestas:

8

Para los archivos, después de mucho ensayo y error, esto es lo que he encontrado (en retrospectiva, algunos bits tienen sentido, otros son bastante confusos).

  • Si sudo apt-get install python-xyz, el paquete va a aparecer en pip list. Por supuesto, puede importarlo en python, pero no aparece en pip.get_installed_distributions (). (Obviamente, lo contrario no es cierto, es decir, si lo hace pip install xyz, no aparecerá en su apt / synaptic)

  • Luego, sudo apt-get install python-xyzsi haces pip install xyzlo que sucede, depende de la versión de pip que tengas.

OLD v1.5.6 (la versión actual incluida en Ubuntu PPA):

  • Esta versión de pip (1.5.6) solo instalará una nueva copia de xyz en una ubicación diferente. Terminas con múltiples copias y esto causa un gran desastre. p.ej:

    • numpy de apt-get es 1.8.2 en /usr/local/lib/python2.7/dist-packages
    • numpy de pip es 1.10.4 en ~ / .local / lib / python2.7 / site-packages
  • Si lo vuelvo a hacer pip install numpy, lo descarga e instala nuevamente. Por lo tanto, podría terminar con muchas versiones diferentes a las que realmente no puede acceder. ¡Puedo hacer pip install numpy5 veces más y luego puedo hacerlo pip uninstall numpy 5x! Obviamente, puede prestar atención para no hacerlo, pero a veces los scripts de instalación de otro software son un poco descuidados y pueden estropear las cosas. Increíble que Ubuntu envíe oficialmente esta versión de pip.

NUEVO v8.0.2 (la versión actual en pip):

  • las versiones más recientes de pip (por ejemplo, 8.0.2 que está en pip) se negarán a instalar el mismo paquete diciendo que el requisito ya se ha cumplido. Por lo tanto, no puede instalar una nueva versión. Este es un buen comportamiento (más información sobre cómo obtener esta versión de pip más adelante).

  • En este caso solo puede actualizar, es decir, instalar con la bandera -U.

  • Sin embargo, cuando intente pip install -U xyzen un paquete instalado con sudo apt-get, obtendrá un error de permisos porque apt-get se instaló en / usr / y necesita acceso de root para escribir allí.

  • Así que AFAIK no tiene más remedio sudo pip install -U xyzque poder actualizarlo. En este caso, pip instala el último paquete en el mismo lugar donde lo escribió sudo apt-get. Por ejemplo, en mi caso /usr/local/lib/python2.7/dist-packages. Esto es bueno.

  • También vale la pena señalar que los paquetes en apt suelen ser bastante más antiguos que los de pip (por ejemplo, numpy v1.8.2 vs 1.10.4, scipy 0.14.1 vs 0.17.0, ipython 2.3 vs 4.0.3, spyder 2.3.5 vs 2.3.8)

Así que mis pensamientos actuales son conseguir las cosas grandes con sudo apt-get, por ejemplo, sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy pythoN-nose Spyder

y luego actualícelos (o al menos algunos de ellos) con sudo pip install -U.

NB: Parece bastante importante obtener el nuevo pip de pip (muy meta)

sudo apt-get install python-pip
sudo pip install -U pip

PD: Soy consciente de virtualenv pero no lo necesito en este momento. Solo necesito un entorno de desarrollo.

Y aquí hay un pequeño script para volcar una lista de paquetes, versión y ruta (pero solo funciona en módulos instalados con pip, no en los de apt-get)

import pip
pp = pip.get_installed_distributions()
for p in sorted([p.location+"\t"+p.project_name+" ("+p.version+")" for p in pp]):
    print p
memorándum
fuente