Faire une installation Python distincte qui peut appeler ArcPy?

28

Je vois beaucoup de questions et réponses me demandant comment créer une installation Python distincte (par exemple, la distribution Anaconda ou Python XY) qui peut utiliser arcpy, tout en ne `` cassant '' pas l'installation d'origine d'ArcGIS python.

J'ai eu ce même problème et je pense avoir trouvé une solution «universelle». Jusqu'à présent, nous l'avons fait sur environ 8 ordinateurs au travail et tout fonctionne bien.

Comment installer une distribution Python distincte qui peut utiliser ArcGIS?

James
la source

Réponses:

37

J'ai créé un petit module (et relativement populaire) qui s'éteint et chasse ArcGIS sur votre PC. Une fois trouvé, il ajoute les chemins d'accès corrects à l'environnement afin que vous puissiez importer arcpy. L'utilisation va comme ceci:

try:
    import archook #The module which locates arcgis
    archook.get_arcpy()
    import arcpy
except ImportError:
    # do whatever you do if arcpy isnt there.

Le module est hébergé sur github ici: https://github.com/JamesRamm/archook

C'est très simple et je suis sûr qu'il peut être rendu plus robuste, mais il fait le travail. Il est disponible sur pypi:pip install archook

Elle présente quelques avantages par rapport à la méthode originale plus «manuelle» (détaillée ci-dessous):

  1. Vous n'avez pas besoin de configurer chaque environnement python séparément ... importez simplement le module et c'est parti
  2. Il ne modifie / crée aucune clé de registre ou variable d'environnement permanente, il n'y a donc aucune chance de gâcher une configuration python / arcgis existante.
  3. Vous n'avez pas besoin de savoir quoi que ce soit sur les chemins d'accès aux différents dossiers / fichiers, ou même quelle version d'arcgis vous avez installée. Le module trouvera tout pour vous.
  4. Aucune authentification administrateur requise
  5. Ce n'est pas spécifique à anaconda - cela fonctionnera avec n'importe quelle installation python

J'ai laissé la réponse originale ci-dessous, mais cette solution est (IMO) 100% meilleure.


Réponse 2014

Ok, donc cette réponse fonctionne pour la distribution Python Anaconda 64 bits avec ArcGIS 10.1 64 bits sur Windows 7 / Windows Server. Certains (ou tous) des conseils donnés ci-dessous peuvent s'appliquer à toute autre distribution Windows de python. Tout d'abord, installez anaconda, il doit aller dans le répertoire C: \ Anaconda. Cochez la case «rendre le système par défaut python». Il peut vous avertir qu'un autre python est installé, mais continuez. Ensuite:

Chemins d'installation et variables d'environnement

La première chose à faire est de copier le fichier DTBGGP64.pth dans le nouveau répertoire de distribution ( C: \ Anaconda ) à partir de C: \ Python27 \ ArcGISx6410.1 \ Lib \ site-packages . La dénomination est arbitraire, mais doit avoir l' extension .pth. Cela vous permettra d'importer ArcPy lors de l'utilisation de la nouvelle distribution. Remarque: l'emplacement correct du fichier DTBGGP64.pth doit se trouver dans le répertoire site-packages (par exemple C: \ Anaconda \ Libs \ site-packages ). J'ai constaté qu'avec certaines anciennes versions d'Anaconda, cela fonctionne si elles étaient placées dans le répertoire de niveau supérieur. Ensuite, les variables d'environnement doivent être vérifiées: Dans la variable système Path, le chemin existant vers le répertoire python doit être remplacé par le nouveau chemin. (par exemple C: \ Anaconda; C: \ Anaconda \ Scripts; ) Cela indiquera à Windows où se trouve le répertoire python par défaut. Assurez-vous que la variable utilisateur PYTHONPATH est également correcte. Cela devrait pointer vers toutes les bibliothèques que vous souhaitez utiliser qui ne sont pas décrites par des fichiers .pth ou qui sont installées dans des packages de site . IE, il peut s'agir de vos propres packages de développement ou de packages tels que mapnik qui ont un emplacement d'installation différent.

Vérifier les paramètres du registre

Sur certaines machines, ce qui précède peut être suffisant pour garantir que vous pouvez utiliser arcpy à partir du nouveau python et que python peut être utilisé dans ArcGIS. Sur d'autres machines, vous devrez peut-être vérifier les clés de registre. Les clés de registre suivantes ont des paramètres python:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
Il doit y avoir une clé et sa valeur doit être C: \ Anaconda \ Lib; C: \ Anaconda \ DLL (ou les dossiers correspondants pour votre installation python)

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
La clé doit être C: \ Anaconda

Vous pouvez avoir d'autres versions de python installées ... auquel cas changez le numéro de version dans les chemins ci-dessus

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon Il s'agit de l'emplacement du fichier .ico à utiliser pour les fichiers .pyc

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ command Il s'agit de la commande à émettre lors de l'ouverture d'un fichier .pyc à partir du shell. Vous devez modifier le python.exechemin d'accès à l'emplacement de la version de votre python souhaitée

HKEY_CLASSES_ROOT \ Python.File Les clés ici sont les mêmes que celles de Python.CompiledFile sauf qu'elles s'appliquent à un fichier .py. Encore une fois, apportez les modifications pertinentes. Il peut avoir une clé supplémentaire pour 'Edit with IDLE' ou 'Edit with Pythonwin'. Encore une fois, apportez les modifications appropriées afin que les chemins d'accès dans ces clés pointent vers la version python souhaitée.

HKEY_CLASSES_ROOT \ Python.NoConFile Ce sont les mêmes que pour Python.File, mais doivent pointer vers le pythonw.exeprogramme le cas échéant.

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1
La clé PythonDir pointe vers l'installation python à utiliser dans ArcMap, etc. Cela peut nécessiter d'autres modifications si vous pointez ArcMap vers la nouvelle installation python. Il peut y avoir des problèmes avec les versions des packages (par exemple numpy) installés par la nouvelle distribution. Je n'en ai pas rencontré.

Pour la majorité de mon travail, cela n'est pas pertinent car je veux généralement utiliser python seul et avoir parfois accès à arcpy. Je souhaite rarement utiliser python depuis arcmap..Par conséquent, j'ai fait peu de tests de cette étape finale, mais cela semble fonctionner pour tout ce que j'ai essayé jusqu'à présent.

J'imagine que le processus serait similaire pour l'installation de Python (x, y) etc.

Autres notes

Le contenu du fichier .pth est une liste de chemins pointant vers les dossiers suivants dans votre installation ArcGIS: bin64, arcpy, ArcToolbox \ Scripts Par exemple, mon fichier .pth contient les éléments suivants:

C:\Program Files (x86)\ArcGIS\Desktop10.2\bin64
C:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy
C:\Program Files (x86)\ArcGIS\Desktop10.2\ArcToolbox\Scripts

James
la source
Cela installe-t-il toutes les dépendances Python qu'ArcGIS possède? matplotlib, numpy, xlrd, xlwt et dateutil?
KHibma
Oui. Pour la distribution anaconda, une liste complète des packages peut être trouvée ici: docs.continuum.io/anaconda/pkgs.html Je ne suis pas aussi familier avec Python (x, y) ou d'autres distributions
James
2
N'oubliez pas qu'ArcGIS (10.2 et 10.1) a des exigences de version très spécifiques pour numpy - doit être 1.6.1 ou vous pouvez casser arcpy.
user2856
1
Veuillez ajouter le contenu du fichier DTBGGP64.pth! De nombreux utilisateurs ne semblent pas l'avoir. :)
mmann1123
1
Une très belle fonctionnalité d'anaconda est que vous pouvez le configurer avec des environnements virtuels avec les versions dont vous avez besoin pour ArcGIS ou tout autre package. Par exemple, vous pourriez avoir un environnement virtuel configuré pour fonctionner avec ArcGIS qui possède les versions attendues par les outils Esri, et une autre qui n'inclut pas arcpy lorsque vous travaillez totalement en dehors d'arcgis.
Curtis Price
5

Ma solution consiste à configurer un script de démarrage qui définit le chemin en fonction de l'environnement python que vous utilisez. Cette méthode a l'avantage (énorme) que vous n'avez pas besoin d'un accès administrateur pour écrire des fichiers .pth dans les installations python. Ce script est configuré pour utiliser Anaconda 32 bits et 64 bits et ArcGIS / arcpy.

    # Startup script to link Anaconda python environment with ArcGIS
    #
    # 1. Install Anaconda, setup environment to match your ArcGIS version
    # 2. Edit the paths below
    # 3. Put this startup script in the startup folder as "usercustomize.py"
    #    Startup folder can be found with: "C:\Python27\ArcGIS10.2\python -m site --user-site"
    #    Usually will be:
    # C:\Users\%USERNAME%\AppData\Roaming\Python\Python27\site-packages

    import sys
    import os

    # edit these paths to match your setup
    arcver = "10.2"
    # Anaconda home folders
    conda32 = r"D:\Users\cprice\Anaconda"
    conda64 = r"D:\Users\cprice\Anaconda64"
    # here are the conda environments you've set up use with ArcGIS
    # arc1022 is the environment setup for ArcGIS
    conda_env32 = "{}/envs/{}".format(conda32, "arc1022")
    conda_env64 = "{}/envs/{}".format(conda64, "arc1022")

    # do not edit below this line

    # ArcGIS Python home folders
    # i.e. C:\Python27\ArcGIS10.2
    arcver = arcver[:4]
    arcpy32 = r"C:\Python27\ArcGIS{}".format(arcver)
    arcpy64 = r"C:\Python27\ArcGISx64{}".format(arcver)

    try:
        if sys.version.find("64 bit") < 0:
            conda_path = os.path.normpath(conda_env32)
            arcpy_path = os.path.normpath(arcpy32)
            arcpy_pthfile = os.path.normpath(
                arcpy_path + "/lib/site-packages/desktop{}.pth".format(arcver))
        else:
            conda_path = os.path.normpath(conda_env64)
            arcpy_path = os.path.normpath(arcpy64)
            arcpy_pthfile = os.path.normpath(
                arcpy_path + "/lib/site-packages/DTBGGP64.pth")

        for p in [conda_path, arcpy_path, arcpy_pthfile]:
            if not os.path.exists(p):
                raise Exception("{} not found".format(p))

        ## print(sys.prefix)
        ## print(conda_path)

        # If running ArcGIS's Python, add conda modules to path
        if (sys.executable.lower().find("desktop" + arcver) != -1
            or sys.prefix.lower().find("arcgis10") != -1):
            sys.path.append(os.path.dirname(arcpy_path))
            conda_site = os.path.join(conda_path, "lib", "site-packages")
            if not os.path.isdir(conda_site):
                raise Exception()
            sys.path.append(conda_site)
            print("usercustomize.py: added conda paths to arc")

        # if running Anaconda add arcpy to path
        elif sys.prefix.lower() == conda_path.lower():
            with open(arcpy_pthfile, "r") as f:
                sys.path +=  [p.strip() for p in f.readlines()]
            print("usercustomize.py: added arcpy paths to conda")

    except Exception as msg:
        print(msg)
        pass
Prix ​​Curtis
la source
Comment définissez-vous / appelez-vous ce script strartup pour virtualenv dans d'autres scripts .py? par exemple, si vous avez juste un script .py qui est "arcpy.CopyFeatures_management ('myinput.shp', 'myoutput.shp')"? Exemple simplifié bien sûr. Thx pour tout conseil
AlexS1
3

Dans le cas où quelqu'un essaie de le faire en utilisant ArcGIS Pro (c'est-à-dire avec python 3 au lieu de python 2):

J'utilise spyder dans le package anaconda. Pour que cela fonctionne, j'allais à Tools> Python Interpreter dans Spyder, puis je pointais Spyder vers le fichier propy.bat actuellement situé dans C: \ Program Files \ ArcGIS \ Pro \ bin \ Python \ Scripts \ propy.bat.

Cela active la bonne version de python dans Spyder et vous permet d'importer arcpy.

T Lynch
la source
1

J'utilise le code suivant pour configurer un environnement virtuel séparé , contenant arcpy et ses dépendances:

set "VENV_PATH=C:\VirtualEnvs\MyArcPyEnv"
set "PYTHON=C:\Python27\ArcGIS10.3"

mklink /J %VENV_PATH%\Lib\site-packages\arcpy "C:\Program Files (x86)\ArcGIS\Desktop10.3\arcpy\arcpy"
mklink /J %VENV_PATH%\Lib\site-packages\numpy %PYTHON%\Lib\site-packages\numpy

mklink /J %VENV_PATH%\Lib\site-packages\matplotlib C:\Python27\ArcGIS10.3\Lib\site-packages\matplotlib
mklink /J %VENV_PATH%\Lib\site-packages\dateutil %PYTHON%\Lib\site-packages\dateutil
mklink /J %VENV_PATH%\Lib\site-packages\mpl_toolkits %PYTHON%\Lib\site-packages\mpl_toolkits

copy %PYTHON%\Lib\site-packages\pyparsing.py  %VENV_PATH%\Lib\site-packages
copy %PYTHON%\Lib\site-packages\pylab.py %VENV_PATH%\site-packages
copy %PYTHON%\Lib\site-packages\netcdftime.py %VENV_PATH%\Lib\site-packages
copy %PYTHON%\Lib\site-packages\netCDF4_utils.py %VENV_PATH%\Lib\site-packages

REM Only one of the following .pth files will exist (dependent on x64 or x32)

copy %PYTHON%\Lib\site-packages\Desktop10.3.pth %VENV_PATH%\Lib\site-packages
copy %PYTHON%\Lib\site-packages\DTBGGP64.pth %VENV_PATH%\Lib\site-packages
geographika
la source