Demasiadas versiones diferentes de Python en mi sistema y causando problemas

Durante los últimos años, he instalado muchas bibliotecas de Python con varias versiones de Python. Para prepararlos para trabajar de inmediato, los instalé a ciegas sin control. Actualmente están causando problemas cuando intenté instalar pynest que invoca numpy, scipy y matplotlib. Después de luchar, voy a limpiar y reinstalar Python y las bibliotecas.

Después de la investigación, encontré Python 2.5 / 2.6 / 2.7 / 3.2 en mi sistema, y ​​cada uno de ellos tiene algunas copias u otras cosas en: (mi SO == Mac OS X 10.7.5 Lion )

  • /Library/Frameworks/
  • /opt/local/Library/Frameworks/
  • /opt/local/bin/
  • /Applications/
  • /usr/local/bin/
  • /usr/bin/
  • /System/Library/Frameworks/

Sé que estoy loco por tener estos. Ahora he eliminado todas estas cosas excepto las cosas en /System/Libarary/Frameworks (nunca /System/Libarary/Frameworks nada de /System/Library/ ). Después del trabajo de limpieza, which python ahora proporciona /usr/bin/python que enlaza a /System/Library/Frameworks .

Ahora, ¿es un entorno claro para que reinstale python? ¿Cómo volver a comprobar que no hay otras versiones existentes? ¿Cómo debo reinstalarlos para garantizar que ellos y sus bibliotecas no estarán en todas partes y tengan muchas copias de nuevo?

Quiero instalar un Python 2.7 limpio en una ubicación adecuada, hacer que mi sistema sepa exactamente dónde está y nunca instalar bibliotecas en ningún otro lugar. Por favor, dame un consejo para que lo manejes de manera profesional.

Para su información, aquí está mi actual $PATH , creo que debería modificarse:

 /opt/local/bin:/opt/local/sbin:/opt/nest/lib/python2.7/site-packages:/usr/local/lib/python2.7/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/texbin:/Library/Frameworks/Python.framework/Versions/3.2/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/django/bin:/usr/X11/bin:/opt/local/bin:/opt/local/sbin:/usr/local/lib/python2.7/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/3.2/bin 

Por favor, hágamelo saber si necesita más información. ¡Gracias!


ACTUALIZACIÓN :

Estoy reconsiderando profusamente por qué se vuelve tan loco. Creo que es porque instalé cosas a través de:

  • easy_install / macports / homebrew / fink / pip veces;
  • .dmg veces;
  • .pkg veces;
  • comstackr código fuente a veces;

e hicieron cosas en diferentes lugares. Me pregunto cuál es el mecanismo detrás de estas formas. ¿Cómo eligen la ubicación de destino? ¿Cómo evitar que arruinen las cosas?

¿Por qué se arruinó?

Hay varias formas diferentes de instalar Python, como dice la actualización de OP, y ubican los archivos en diferentes ubicaciones. Por ejemplo, macports pone cosas en /opt/local/ , mientras que homebrew pone cosas en /usr/local/ . Además, Mac OS X trae consigo algunas versiones de python. Por lo tanto, si instala python muchas veces a través de diferentes formas, obtendrá muchas versiones de python existentes de forma independiente en su sistema.

¿Qué problema causa?

No se exactamente Supongo que el problema es que si tiene muchas versiones de python, entonces cuál de ellas usar y dónde encontrar los paquetes se determinará por el orden de ruta en su sistema PATH y PYTHONPATH respectivamente. Así que puede perder el control de dónde instalar los módulos de Python. Tenga en cuenta que si ejecuta sudo python setup.py install para instalar un módulo (encuentra python por el PATH la raíz) e intente import el módulo por python -c "import it" (esta vez encuentra python por su PATH ), tal vez algo salga mal Esta es mi suposición, no la validé. Pero en mi caso, algo salió mal.

¿Cómo evitar esto?

Creo que el principio sería tener en cuenta que diferentes formas y herramientas instalan las cosas de forma independiente en diferentes ubicaciones, así que utilícelas con atención .

  • A menos que tenga la intención de hacerlo, no instale la misma cosa dos veces de manera diferente. (Si tiene la intención de hacerlo para python, es posible que desee revisar virtualenv )
  • Vigile el orden del camino en su PATH y considere si es correcto.
  • Al instalar los módulos, deje claro qué python (o pip) se está ejecutando y dónde está instalado el módulo.

Entonces, ¿cómo resolví mi propio caso?

Ya que se había estado arruinando y parecía ser muy difícil de curar, por lo que finalmente resolví esta pregunta mediante una reinstalación completa del sistema operativo , y comencé a seguir los DO y DONT anteriores. Para la instalación del entorno científico con python (numpy / scipy / matplotlib, que había mostrado problemas para hacerme esta pregunta), encontré que este tutorial fue extremadamente útil. Entonces, el problema se resolvió finalmente.

Aquí está lo que me estaba confundiendo y cómo lo resolví.

 $ which python /usr/bin/python $ which python3 /usr/local/bin/python3 $ ls /usr/local/bin/python ls: /usr/local/bin/python: No such file or directory 

Entonces, noté que no tenía una instalación de Python2.7 en HomeBrew, pero sí que tenía la instalación de python3. La versión bajo / usr / bin / python está usando el valor predeterminado del sistema. Se puede decir en base a la ruta de búsqueda del módulo:

 $ /usr/bin/python Python 2.7.10 (default, Feb 7 2017, 00:08:15) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin `enter code here`Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/Library/Python/2.7/... 

Observe que ‘/ Library / Python’ … es la versión de python de Mac OS. Pero quiero permanecer estrictamente en una versión instalada por el usuario (es decir, HomeBrew).

Así que aquí está lo que hice para solucionar esto:

 $ brew install python ... Warning: python 2.7.13 is already installed, it's just not linked. You can use `brew link python` to link this version. $ brew link --overwrite python $ which python /usr/local/bin/python $ python Python 2.7.10 (default, Feb 7 2017, 00:08:15) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/usr/local/Cellar/python/2.7.13... 

Ya no es / Library / .. pero / usr / local.

¡Ahora está encontrando todos mis módulos pip instalados! ¡Problema resuelto!


ACTUALIZAR:

Después de actualizar brew a la versión 1.5.4, parece que los enlaces simbólicos fueron eliminados. Y ahora tienes que añadir esto a tu camino:

 export PATH="/usr/local/opt/python/libexec/bin:$PATH" 

Lea la sección de Advertencias en ‘brew info python’:

 ==> Caveats This formula installs a python2 executable to /usr/local/bin. If you wish to have this formula's python executable in your PATH then add the following to ~/.bash_profile: export PATH="/usr/local/opt/python/libexec/bin:$PATH" Pip and setuptools have been installed. To update them pip2 install --upgrade pip setuptools You can install Python packages with pip2 install  They will install into the site-package directory /usr/local/lib/python2.7/site-packages See: https://docs.brew.sh/Homebrew-and-Python.html 

Para instalar las distribuciones de Python en una carpeta específica, puede usar el esquema --prefix durante la instalación de python. Usando el esquema de prefijos , puede, por ejemplo, instalar Python 2.7 en la carpeta /opt/py27 . Ahora, para usar la nueva distribución de Python instalada, debes: limpiar tu PATH y LD_LIBRARY_PATH :

  • Eliminar todas las rutas ‘antiguas’ de Python y
  • configura (de acuerdo con mi ejemplo) las variables de entorno como esta:
    • RUTA: Agregar / opt / py27 / bin
    • LD_LIBRARY_PATH: Agregar / opt / py27 / lib

Eso es.

(En caso de que necesite varios entornos de Python instalados al mismo tiempo, sugeriría que echen un vistazo a virtualenv )

Aquí hay otra gran solución para administrar diferentes versiones de python:

https://github.com/pyenv/pyenv

(Ya proporcioné una respuesta aquí, pero decidí publicar esto como una respuesta adicional o alternativa)