Uso de PyQGIS, ArcPy, NumPy, SciPy Together en el símbolo del sistema de Windows

8

Me encontré con este pequeño problema cuando estaba buscando acceder a las instalaciones de Python desde ArcGIS, QGIS, Anaconda (citado porque SciPy y NumPy vienen con él) y la versión 2.7 vs 3. A veces, me resulta más fácil acceder a Windows Command Promptpara haga un poco de trabajo rápido en lugar de abrir un programa SIG o IDE de python para acceder a la solicitud interactiva.

En lugar de navegar a cada carpeta, establecer accesos directos o cambiar la PATHvariable de entorno, quería una forma diferente de acceder a cada instalación de Python a través de Command Prompt.

Editar

Los profesionales de SIG que usan python para su trabajo terminan teniendo que acceder a cada instalación de forma manual para acceder a las funciones que contiene. En lugar de esperar que se cargue algo como ArcMap, generalmente es mucho más rápido presionar su winkey -r + cmd y escribir pythonen su Símbolo del sistema para iniciar la consola de Python. Si desea utilizar ArcPypara reproyectar un archivo de forma, debe abrir la consola de Python, que está vinculada a ArcPy. Si desea utilizar una herramienta de PyQGISporque no tiene la licencia ESRI adecuada, debe encontrar la python.exeque está vinculada a esos módulos. Esto puede ser un dolor cuando se está tratando de hacer el trabajo en ArcPy, PyQGIS, NumPy, oSciPy sin tener todas las bibliotecas instaladas de forma coherente como una instalación de Python.

Por lo general, está vinculado por su Pathvariable a la instalación de Python que es su valor predeterminado mientras está en el Command Prompt. Esta pregunta y las siguientes respuestas buscan abordar cómo los profesionales de SIG podrían utilizar múltiples instalaciones de Python juntas en un solo entorno. Los IDE de Python apuntan a una sola instalación de Python y requieren cambiar la configuración para utilizar diferentes. Por ejemplo, mi PyScripterinstalación apunta a mi instalación ArcGIS de Python. Entonces, si deseo utilizar mis PyQGISmódulos, necesito abrir QGIS o cambiar la configuración PyScripter.

Al escribir módulos / scripts completos, tiene sentido apuntar uno individualmente. De esa manera, podría obtener algún tipo de finalización de código. Sin embargo , cuando estás utilizando algunas herramientas en cada instalación para manipular un conjunto de datos, sería mucho más agradable si se puede consolas pitón rápidamente flip / instalaciones dentro de una única pantalla también conocido como el Command Prompt.

A aquellos que votan para cerrar / fuera de tema ...

Aunque esto obviamente se aplica a cualquier cosa a la que esté conectado el lenguaje python , para el usuario pobre de SIG que no puede permitirse comprar extensiones ESRI para herramientas de análisis de datos, sirve como una forma de simplificar su vida. Como han mostrado algunas de las respuestas, poder personalizar más este proceso, por ejemplo, agregar argumentos a los .cmdarchivos, podría ser de gran utilidad si alguien ejecuta un proceso personalizado. Existe la posibilidad de que un usuario de SIG / computadora más inteligente pueda configurar .cmdarchivos personalizados para ejecutar procesos rápidamente sin tener que pasar por el alboroto de lidiar con las diferentes instalaciones de software IDE / GIS, etc.

El único inconveniente de ejecutar una consola de Python dentro Command Promptes la pérdida de la finalización del código. Sin embargo, si ejecuta algo suficiente, como arcpy.AddField_management(), la finalización del código simplemente se interpone en el camino.

Branco
fuente
2
Me pregunto si esto sería más apropiado en SuperUser. Esto realmente no tiene nada que ver con SIG, más allá de involucrar tangencialmente un tiempo de ejecución utilizado comúnmente en SIG. Ciertamente, creo que es más probable que obtenga la mejor respuesta en SuperUser que aquí.
jpmc26
1
@ jpmc26. Posiblemente, pero creo que es apropiado para SIG, ya que comparé específicamente QGIS y ArcGIS y puede ser común usar varias instalaciones de Python juntas en SIG. Se expandió un poco más, pero dado que muchas respuestas son codificadas aquí, parece apropiado.
Branco
Hay preguntas frecuentes en este lado de las cosas con respecto a las instalaciones y configuraciones de software SIG. Esto aplica lo mismo cuando estamos invocando 2 instalaciones de Python diferentes a partir de 2 componentes de software SIG diferentes a través del símbolo del sistema. Si bien, se puede expandir fácilmente a otras cosas, símbolo del sistema, pero la intención original es configurar el acceso rápido a las instalaciones de QGIS / ESRI python sin problemas.
Branco

Respuestas:

9

Voy a ofrecer una alternativa que creo que es un poco más limpia. Está inspirado en una combinación de la sugerencia de Josef y un patrón común en los sistemas * nix.

  1. Comience creando un directorio. Este directorio se utilizará para contener archivos "alias" para cada instalación. Entonces algo como C:\Python\aliaseso C:\PythonAliasesfuncionará.

  2. Luego cree un script para cada instalación. Cada script esencialmente alias una de las instalaciones de Python a las que necesita hacer referencia simplemente llamando a su ejecutable. Por ejemplo, el contenido se vería así para la instalación de QGIS:

    @"C:\Program Files\QGIS Dufour\bin\Python.exe" %*

    Guárdelo con un nombre descriptivo en la carpeta que creó, como pyqgis.cmdo pyqgis.bat.

    En su lugar, %*pasa todos los argumentos que se le dieron al script al ejecutable de Python. Entonces puedes hacer esto:

    C:\>C:\Python\aliases\pyqgis.cmd -c "print('Hello, world!')"
    Hello, world!

    (El @símbolo simplemente evita que el símbolo del sistema repita innecesariamente el comando).

  3. Agregue el directorio que contiene estos scripts a PATH. Ahora puede llamarlos sin la ruta completa:

    C:\>pyqgis -c "print('Hello, world!')"
    Hello, world!

Esto tiene varias ventajas, en mi opinión:

  • Sin gestión de varias variables de entorno de todo el sistema. (Porque seamos sinceros, la interfaz de Windows para hacerlo es molesta en el mejor de los casos). Simplemente modifique PATHuna vez. Obtener nuevas instalaciones PATHo eliminar las antiguas es una simple gestión de archivos.
  • Todos sus alias se enumeran en un solo lugar. Averiguar qué nombres tiene disponibles es una simple lista de directorios de distancia. (Esto sería especialmente útil si no recuerda el nombre).
  • Es menos probable que surjan problemas de citas
  • Esto refleja un patrón ya existente, por lo que es más fácil de entender / reconocer. No es raro ver alias como python2y python3en el bindirectorio en una máquina * nix. Si bien esto no es exactamente lo mismo, creo que es lo suficientemente similar como para que tenga sentido que alguien sepa que esto se hace en los sistemas * nix.

No estoy completamente satisfecho con esta configuración, pero no creo que pueda hacer mucho mejor en Windows.

jpmc26
fuente
Me gusta este proceso Yo, como la mayoría de los usuarios típicos de Windows, no me aventuro demasiado en las variables del sistema, la ruta y otras cosas a menos que algo me lo indique. Estaba intentando saltar entre QGIS python y Anaconda anoche y descubrí mi pequeño atajo. Esta es probablemente la mejor solución a largo plazo.
Branco
7

Decidí jugar con la System Variablesparte de la Environment Variablesconfiguración para ver si puedo facilitar el acceso a cada instalación de Python mientras estoy en el Command Prompt. Descubrí que podía agregar uno nuevo System Variabley llamarlo desde el Command Promptpara acceder a la instalación de Python que quisiera.

Algunos ejemplos:

Variable = PyQGIS Valor ="C:\Program Files\QGIS Dufour\bin\Python.exe"

Dejé las comillas dobles allí para no tener que citar el espacio en el Command Promptpara mantener toda la cadena unida como un solo argumento

Variable = Anaconda Valor =AnacondaDirectory\Python.exe

Cómo accedo a mis instalaciones de scipy / numpy / etc

Variable = Python3 Valor =C:\Python34\Python.exe

Python 3 incluye un lanzador que le permite especificar la versión ... >> py -3para python 3 ... información aquí

Para llamar a System Variableen el Command Prompt:

Cuando esté en el Command Prompt, puede llamar a su variable escribiendo %VariableName%en el símbolo del sistema. Para cada instalación de Python, se navegará hacia {Directory}\Python.exepara abrir el intérprete interactivo. Si no cotizó un Valor que tiene espacios, debe agregar comillas alrededor de su llamada variable, ej. "%VariableValueWithSpaces%". Sin las comillas, la línea se divide por los espacios para que su programa no se inicie.

Estoy seguro de que probablemente haya formas más fáciles de hacer las cosas, pero descubrí que esto es un conocimiento útil si eres especialmente aficionado a usar Command PromptWindows. Me gusta la capacidad de acceder a instalaciones individuales de Python simplemente proporcionando un nombre de variable diferente.

Branco
fuente
Alternativamente, lo que hago: tener un archivo .cmd para cada instalación que establece la ruta y posiblemente otras cosas en la ruta. Entonces, por ejemplo, tenga python34.cmd en su ruta que contiene @set PATH=C:\Python34\;%PATH%. Luego, simplemente ingresando python34 hará que esta python esté disponible.
Josef dice reinstalar a Mónica el
¿Te refieres a tenerlo como otra variable del sistema? ¿O anexar la ubicación de python34.cmd a su Pathvariable?
Branco
Me refiero a crear un archivo cmd que pre Pend la ubicación de python.exe a su ruta. Pones este archivo cmd en cualquier lugar de tu ruta. Puede crear una nueva carpeta y anteponerla a la variable de ruta. Luego puede ejecutar python34 desde cada shell, porque está en la ruta. Python34.cmd luego cambiará la ruta, por lo que la versión de Python que desea es lo primero en la ruta para la sesión de shell actual (y todas las sesiones secundarias) solamente.
Josef dice que reinstalar a Mónica el
Ok, lo tengo ... Esa también es una buena idea, especialmente si está agregando configuraciones / cambios adicionales al archivo .cmd.
Branco