Utilisation de PyQGIS, ArcPy, NumPy, SciPy Together dans l'invite de commandes Windows

8

J'ai rencontré ce léger problème lorsque je cherchais à accéder à des installations python à partir d'ArcGIS, QGIS, Anaconda (cité parce que SciPy et NumPy viennent avec), et la version 2.7 vs 3. Parfois, je trouve plus facile de simplement passer dans Windows Command Promptpour faites un peu de travail rapide au lieu d'ouvrir un programme SIG ou un IDE python afin d'accéder à l'invite interactive.

Au lieu de naviguer dans chaque dossier, de définir des raccourcis ou de désactiver la PATHvariable d'environnement, je voulais une manière différente d'accéder à chaque installation de python via le Command Prompt.

Éditer

Les professionnels SIG qui utilisent python pour leur travail finissent par avoir à accéder manuellement à chaque installation afin d'accéder aux fonctionnalités qui s'y trouvent. Au lieu d'attendre le chargement d'ArcMap, il est généralement beaucoup plus rapide d' appuyer sur votre winkey -r + cmd et de taper pythondans votre invite de commande pour démarrer la console python. Si vous souhaitez utiliser ArcPypour reprojeter un fichier de formes, vous devez ouvrir votre console python, qui est liée à ArcPy. Si vous souhaitez utiliser un outil à partir de PyQGISparce que vous ne disposez pas de la licence ESRI appropriée, vous devez trouver celui python.exequi est lié à ces modules. Cela peut être une douleur quand vous essayez de faire un travail en ArcPy, PyQGIS, NumPyouSciPy sans que toutes les bibliothèques soient installées de manière cohérente en une seule installation python.

En règle générale, vous êtes lié par votre Pathvariable à laquelle l'installation de python est votre installation par défaut dans le Command Prompt. Cette question et les réponses qui suivent visent à déterminer comment les professionnels SIG peuvent utiliser plusieurs installations Python ensemble dans un même environnement. Les IDE Python ciblent une seule installation python et nécessitent de modifier les paramètres afin d'en utiliser différents. Par exemple, mon PyScripterinstallation cible mon installation ArcGIS de Python. Donc, si je veux utiliser mes PyQGISmodules, je dois ouvrir QGIS ou modifier les paramètres dans PyScripter.

Lors de l'écriture de modules / scripts complets, il est logique d'en cibler un individuellement. De cette façon, vous pourriez obtenir une sorte de complétion de code. Cependant , lorsque vous êtes en utilisant des outils dans chaque installation pour manipuler un ensemble de données, il serait beaucoup mieux si vous pouvez parcourir rapidement les consoles de python / installations dans un seul écran alias le Command Prompt.

À ceux qui votent pour fermer / hors sujet ...

Bien que cela s'applique évidemment à tout ce à quoi le langage python est attaché , pour le pauvre utilisateur de SIG qui ne peut pas se permettre d'acheter des extensions ESRI pour des outils d'analyse de données, cela leur permet de simplifier leur vie. Comme certaines des réponses l'ont montré, le fait de pouvoir personnaliser davantage ce processus, par exemple ajouter des arguments aux .cmdfichiers, pourrait potentiellement être très utile si quelqu'un exécute un processus personnalisé. Il existe un potentiel pour un utilisateur de SIG / ordinateur plus averti de pouvoir configurer des .cmdfichiers personnalisés pour exécuter rapidement des processus sans avoir à passer par l’agitation de gérer différentes installations de logiciels IDE / SIG, etc.

Le seul inconvénient de l'exécution d'une console python dans le Command Promptest la perte de complétion de code. Cependant, si vous exécutez quelque chose d'assez, par exemple arcpy.AddField_management(), la complétion de code ne fait qu'empêcher.

Branco
la source
2
Je me demande si cela serait plus approprié sur SuperUser. Cela n'a vraiment rien à voir avec le SIG, au-delà de l'implication tangentielle d'un runtime couramment utilisé dans le SIG. Certes, je pense que vous seriez plus susceptible d'obtenir la meilleure réponse sur SuperUser que vous ne le feriez ici.
jpmc26
1
@ jpmc26. Peut-être, mais je pense que c'est SIG approprié car j'ai comparé spécifiquement QGIS et ArcGIS et l'utilisation de plusieurs installations python ensemble dans SIG peut être courante. Cela s'est développé un peu plus loin, mais comme beaucoup de réponses sont codées ici, cela semble approprié.
Branco
Il y a souvent des questions de ce côté-ci concernant les installations et les configurations des logiciels SIG. Cela s'applique de la même manière lorsque nous invoquons 2 installations python différentes à partir de 2 composants logiciels SIG différents via l'invite de commande. Bien qu'il puisse facilement être étendu à d'autres choses, l'invite de commande, mais l'intention initiale est de configurer un accès rapide aux installations python QGIS / ESRI sans tracas.
Branco

Réponses:

9

Je vais proposer une alternative qui je pense est un peu plus propre. Il est inspiré d'une combinaison de la suggestion de Josef et d'un modèle commun sur les systèmes * nix.

  1. Commencez par créer un répertoire. Ce répertoire sera utilisé pour contenir les fichiers "alias" pour chaque installation. Donc, quelque chose comme C:\Python\aliasesou C:\PythonAliasesfonctionnera.

  2. Créez ensuite un script pour chaque installation. Chaque script alias essentiellement l'une des installations Python que vous devez référencer en appelant simplement son exécutable. Par exemple, le contenu ressemblerait à ceci pour l'installation de QGIS:

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

    Enregistrez-le avec un nom descriptif dans le dossier que vous avez créé, tel que pyqgis.cmdou pyqgis.bat.

    Le %*passe tous les arguments qui ont été donnés au script dans l'exécutable Python à la place. Vous pouvez donc faire ceci:

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

    (Le @symbole empêche simplement l'invite de commande de faire écho inutilement la commande.)

  3. Ajoutez le répertoire contenant ces scripts dans PATH. Vous pouvez maintenant les appeler sans le chemin complet:

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

Cela présente plusieurs avantages, à mon avis:

  • Pas de gestion de plusieurs variables d'environnement à l'échelle du système. (Parce que avouons-le, l'interface Windows pour le faire est au mieux ennuyeuse.) Vous ne modifiez PATHqu'une seule fois. Obtenir de nouvelles installations PATHou en supprimer d'anciennes est une gestion de fichiers simple.
  • Tous vos alias sont répertoriés au même endroit. Déterminer les noms dont vous disposez est une simple liste de répertoires. (Cela serait particulièrement utile si vous ne vous souvenez pas du nom.)
  • Les problèmes de citation sont moins susceptibles de survenir
  • Cela reflète un modèle déjà existant et est donc plus facilement compris / reconnu. Il n'est pas rare de voir des alias comme python2et python3dans le binrépertoire sur une machine * nix. Bien que ce ne soit pas exactement la même chose, je pense que c'est assez similaire pour que cela ait du sens pour quelqu'un sachant que cela se fait sur les systèmes * nix.

Je ne suis pas entièrement satisfait de cette configuration, mais je ne pense pas que vous puissiez faire beaucoup mieux sous Windows.

jpmc26
la source
J'aime ce processus. Comme la plupart des utilisateurs de Windows, je ne m'aventure pas trop dans les variables système, le chemin d'accès et d'autres choses, sauf si quelque chose me le dit. Hier soir, j'essayais simplement de basculer entre QGIS python et Anaconda et j'ai trouvé mon petit raccourci. C'est probablement la meilleure solution à long terme.
Branco
7

J'ai décidé de jouer avec la System Variablespartie des Environment Variablesparamètres pour voir si je peux faciliter l'accès à chaque installation de python pendant que dans le Command Prompt. J'ai trouvé que je pouvais en ajouter un nouveau System Variableet l'appeler depuis le Command Promptpour accéder à l'installation de python que je voulais.

Quelques exemples:

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

J'ai laissé les guillemets doubles là-dedans donc je n'aurais pas à citer l'espacement dans le Command Promptpour garder la chaîne entière ensemble comme un seul argument

Variable = Anaconda Valeur =AnacondaDirectory\Python.exe

Comment accéder à mes installations de scipy / numpy / etc

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

Python 3 inclut un lanceur qui vous permet de spécifier la version ... >> py -3pour python 3 ... info ici

Pour appeler un System Variabledans le Command Prompt:

Lorsque vous êtes dans le Command Prompt, vous pouvez appeler votre variable en tapant %VariableName%dans l'invite de commande. Pour chaque installation de python, il naviguera vers le {Directory}\Python.exepour ouvrir l'interpréteur interactif. Si vous n'avez pas cité de valeur contenant des espaces, vous devez ajouter des guillemets autour de votre appel de variable, par exemple. "%VariableValueWithSpaces%". Sans les guillemets, la ligne est divisée par les espaces afin que votre programme ne démarre pas.

Je suis sûr qu'il existe probablement des façons plus faciles de faire les choses, mais j'ai trouvé que c'était un peu utile si vous aimez particulièrement utiliser Command PromptWindows. J'aime la possibilité d'accéder à des installations python individuelles simplement en fournissant un nom de variable différent.

Branco
la source
Alternativement, ce que je fais: avoir un fichier .cmd pour chaque installation qui définit le chemin et éventuellement d'autres choses dans le chemin. Par exemple, ayez python34.cmd dans votre chemin d'accès qui contient @set PATH=C:\Python34\;%PATH%. Ensuite, la simple saisie de python34 rendra ce python disponible.
Josef dit Réintégrer Monica
Voulez-vous dire l'avoir comme une autre variable système? Ou ajouter l'emplacement de python34.cmd à votre Pathvariable?
Branco
Je veux dire que vous créez un fichier cmd qui pré Pend l'emplacement de python.exe à votre chemin. Vous placez ce fichier cmd n'importe où sur votre chemin. Vous pouvez créer un nouveau dossier et l'ajouter à la variable de chemin. Vous pouvez ensuite exécuter python34 à partir de chaque shell, car il se trouve dans le chemin. Python34.cmd changera alors le chemin afin que la version python souhaitée soit la première chose dans le chemin pour la session shell actuelle (et toutes les sessions enfants) uniquement.
Josef dit Réintégrer Monica
Ok, compris ... C'est aussi une très bonne idée, surtout si vous ajoutez des paramètres / modifications supplémentaires au fichier .cmd.
Branco