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-XXX
vs 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:
Si, por alguna razón, primero instalo un paquete, por ejemplo, numpy, with
sudo apt-get install numpy
, y luego lo hagopip 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í )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 install
seguido de apip install
? o eso es estúpido?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 hagopip 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é.
fuente
Respuestas:
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 enpip 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 hacepip install xyz
, no aparecerá en su apt / synaptic)Luego,
sudo apt-get install python-xyz
si hacespip install xyz
lo 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:
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 hacerpip install numpy
5 veces más y luego puedo hacerlopip 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 xyz
en 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 xyz
que 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 pytho
N-nose Spydery 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)
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)
fuente