Suite

Utilisation de PyQGIS, ArcPy, NumPy, SciPy ensemble dans l'invite de commande Windows

Utilisation de PyQGIS, ArcPy, NumPy, SciPy ensemble dans l'invite de commande Windows


J'ai rencontré ce léger problème lorsque je cherchais à accéder aux installations python d'ArcGIS, QGIS, Anaconda (cité parce que SciPy et NumPy sont fournis avec) et la version 2.7 vs 3. Parfois, je trouve qu'il est plus facile d'accéder à Windows 'Invite de commandesfaire 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 vers chaque dossier, de définir des raccourcis ou de désactiver leCHEMINvariable d'environnement, je voulais une manière différente d'accéder à chaque installation python via leInvite de commandes.

Éditer

Les professionnels du SIG qui utilisent python pour leur travail finissent par devoir accéder manuellement à chaque installation afin d'accéder aux fonctionnalités qu'elles contiennent. Au lieu d'attendre le chargement de quelque chose comme ArcMap, il est généralement beaucoup plus rapide d'atteindre votre clin d'oeil-r + cmd et tapezpythondans votre invite de commande pour démarrer la console python. Si vous voulez utiliserArcPypour reprojeter un shapefile, vous devez ouvrir votre console python, qui est liée àArcPy. Si vous souhaitez utiliser un outil dePyQGISparce que vous n'avez pas la licence ESRI appropriée, vous devez trouver lepython.exequi est lié à ces modules. Cela peut être une douleur lorsque vous essayez de travailler dansArcPy,PyQGIS,NumPy, ou alorsSciPysans 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 votreCheminvariable à laquelle l'installation de python est votre valeur par défaut tandis que dans leInvite de commandes. Cette question et les réponses suivantes cherchent à expliquer comment les professionnels du SIG pourraient utiliser plusieurs installations python ensemble dans un seul 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, monPyScripterinstall cible mon installation ArcGIS de Python. Donc, si je veux utiliser monPyQGISmodules, je dois ouvrir QGIS ou modifier les paramètres dansPyScripter.

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. pourtant, lorsque vous utilisez simplement des outils dans chaque installation pour manipuler un ensemble de données, ce serait beaucoup plus agréable si vous pouviez rapidement retourner les consoles/installations python dans un seul écran alias lesInvite de commandes.

À 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 SIG qui n'a pas les moyens d'acheter des extensions ESRI pour les outils d'analyse de données, cela leur permet de se simplifier la vie. Comme certaines des réponses l'ont montré, pouvoir personnaliser davantage ce processus, par ex. ajouter des arguments à.cmdfichiers, pourrait potentiellement être d'une grande utilité si quelqu'un exécute un processus personnalisé. Il est possible qu'un utilisateur de SIG/ordinateur plus averti soit en mesure de configurer des.cmdfichiers pour exécuter rapidement des processus sans avoir à s'occuper de différentes installations de logiciels IDE/SIG, etc.

Le seul bémol pour exécuter une console python dans leInvite de commandesest la perte de l'achèvement du code. Cependant, si vous exécutez quelque chose d'assez, commearcpy.AddField_management(), la complétion du code ne fait que gêner.


Je vais proposer une alternative que je pense 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 commeC:Pythonaliasou alorsC:PythonAliasesmarchera.

  2. Créez ensuite un script pour chaque installation. Chaque script aliase 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 FilesQGIS DufourinPython.exe" %*

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

    le%*passe tous les arguments qui ont été donnés au script dans l'exécutable Python à la place. Donc tu peux faire ça :

    C:>C:Pythonaliasespyqgis.cmd -c "print('Bonjour tout le monde !')" Bonjour tout le monde !

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

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

    C:>pyqgis -c "print('Bonjour tout le monde !')" Bonjour tout le monde !

Cela a plusieurs avantages, à mon avis:

  • Pas de gestion de plusieurs variables d'environnement à l'échelle du système. (Parce qu'avouons-le, l'interface Windows pour faire cela est au mieux ennuyeuse.) Vous venez de modifierCHEMINune fois que. Obtenir de nouvelles installations surCHEMINou supprimer les anciens 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 commepython2etpython3dans lepoubellerépertoire sur une machine *nix. Bien que ce ne soit pas exactement la même chose, je pense que c'est suffisamment similaire pour que cela ait du sens pour quelqu'un sachant que cela est 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.


J'ai décidé de jouer avec leVariables systèmepartie de laVariables d'environnementparamètres pour voir si je peux faciliter l'accès à chaque installation python dans leInvite de commandes. J'ai trouvé que je pouvais ajouter un nouveauVariable systèmeet l'appeler duInvite de commandespour accéder à l'installation python que je voulais.

Quelques exemples:

Variable =PyQGISValeur ="C:Program FilesQGIS DufourinPython.exe"

J'ai laissé les guillemets doubles pour ne pas avoir à citer l'espacement dans leInvite de commandespour garder la chaîne entière ensemble comme un seul argument

Variable =AnacondaValeur =Répertoire AnacondaPython.exe

Comment j'accède à mes installations de scipy/numpy/etc

Variable =Python3Valeur =C:Python34Python.exe

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

Pour appeler unVariable systèmedans leInvite de commandes:

Quand tu es dans leInvite de commandes, vous pouvez appeler votre variable en tapant%Nom de variable%dans l'invite de commande. Pour chaque installation de python, il naviguera vers le{Répertoire}Python.exepour ouvrir l'interpréteur interactif. Si vous n'avez pas cité un Valeur qui a des espaces, vous devez ajouter des guillemets autour de votre appel de variable, ex."%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 y a probablement des moyens plus faciles de faire les choses, mais j'ai trouvé que c'était une connaissance utile si vous aimez particulièrement utiliser leInvite de commandesdans Windows. J'aime la possibilité d'accéder à des installations python individuelles en fournissant simplement un nom de variable différent.