ArcPy'i çağırabilecek ayrı Python kurulumu yapmak?


28

Çok fazla soru soracağım: Orijinal ArcGIS python kurulumunu 'kırmadan' arcpy kullanabilen ayrı bir Python kurulumu (örn. Anaconda veya Python XY dağılımı) nasıl oluşturabileceğinizi soruyorum.

Aynı sorunu yaşadım ve sanırım 'evrensel' bir çözüm buldum. Şimdiye kadar bunu işyerinde yaklaşık 8 bilgisayarda yaptık ve hepsi iyi çalışıyor.

ArcGIS'i kullanabilecek ayrı bir Python dağılımı nasıl kurulur?

Yanıtlar:


37

PC'nizde ArcGIS'i yakalayan ve arayan küçük (ve nispeten popüler) bir modül yarattım. Bir kez bulduktan sonra arcpy alabilirsiniz böylece çevreye doğru yollar ekler. Kullanım bu şekilde gider:

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

Modül burada github'da barındırılmaktadır: https://github.com/JamesRamm/archook

Çok basit ve daha sağlam yapılabileceğinden eminim, ama işi yapıyor. Pypi'de kullanılabilir:pip install archook

Daha 'manuel' orijinal yönteme göre birkaç avantajı vardır (aşağıda detaylandırılmıştır):

  1. Her bir python ortamını ayrı ayrı yapılandırmanız gerekmez ... sadece modülü alın ve çıkın
  2. Herhangi bir kayıt defteri anahtarını veya kalıcı ortam değişkenini düzenlemez / oluşturmaz, bu nedenle mevcut herhangi bir python / arcgis yapılandırmasını bozma şansı yoktur .
  3. Çeşitli klasörlere / dosyalara giden yollar veya hatta hangi arcgis versiyonunun kurulu olduğu hakkında hiçbir şey bilmenize gerek yok. Modül sizin için her şeyi bulacaktır.
  4. Yönetici doğrulaması gerekmez
  5. Anaconda'ya özgü değildir - herhangi bir python kurulumuyla çalışacaktır.

Asıl cevabı aşağıda bıraktım, ancak bu çözüm (IMO)% 100 daha iyi.


2014 cevap

Tamam, bu cevap Windows 7 / Windows Server'da ArcGIS 10.1 64bit ile Anaconda 64bit Python dağıtımı için çalışıyor. Aşağıda verilen ipuçlarından bazıları (veya tümü), pitonun diğer herhangi bir pencere dağılımı için geçerli olabilir. Öncelikle anaconda'yı kurun, C: \ Anaconda dizinine gitmelidir. 'Make system default python' kutusunu işaretleyin. Takılı başka bir python olduğuna dair bir uyarı verebilir, ancak devam eder. Sonra:

Kurulum Yolları ve Ortam Değişkenleri

Yapılacak ilk şey DTBGGP64.pth dosyasını, yeni dağıtım dizinine ( C: \ Anaconda ) C: \ Python27 \ ArcGISx6410.1 \ Lib \ site-pack'lerden kopyalamaktır . Adlandırma arbritrary olmakla olmalıdır .pth yeni dağıtım kullanılırken bu size ArcPy almak sağlayacak uzantısı. Not: DTBGGP64.pth dosyasının doğru konumu site paketleri dizininde olmalıdır (örn. C: \ Anaconda \ Libs \ site-Packages ). Anaconda'nın bazı eski sürümlerinde üst düzey dizine oturduysa işe yaradığını gördüm Sonraki, ortam değişkenlerinin kontrol edilmesi gerektiğini: Path sistem değişkenindepython dizinine giden yol yeni yolla değiştirilmelidir. (örn. C: \ Anaconda; C: \ Anaconda \ Scripts; ) Bu, pencerelere varsayılan python dizininin nerede olduğunu söyleyecektir. PYTHONPATH kullanıcı değişkeninin de doğru olduğundan emin olun . Bu, kullanmak istediğiniz, .pth dosyaları tarafından tanımlanmayan veya site paketlerine yüklenmiş kütüphaneleri işaret etmelidir . IE, kendi geliştirme paketleriniz veya farklı bir kurulum konumuna sahip olan mapnik gibi paketler olabilir .

Kayıt Defteri Ayarlarını Kontrol Et

Bazı makinelerde, yeni pythondan arcpy kullanabilmenizi ve python'un ArcGIS içinde kullanılmasını sağlamak için yeterli olabilir. Diğer makinelerde kayıt defteri anahtarlarını kontrol etmeniz gerekebilir. Aşağıdaki kayıt defteri anahtarları python ayarlarına sahiptir:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
Bir anahtar olmalı ve 'değeri C: \ Anaconda \ Lib; C: \ Anaconda \ DLL olmalıdır (veya python kurulumunuz için ilgili klasörler)

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
Anahtar, C: \ Anaconda olmalıdır

Başka python sürümleri yüklenmiş olabilir ... bu durumda yukarıdaki yollardaki sürüm numarasını değiştirin

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon Bu, .pyc dosyaları için kullanılacak .ico dosyasının konumu

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ command Bu, bir .pyc dosyasını kabuktan açarken verilecek komuttur. Sen değişmelidir python.exeistediğiniz piton sürümü konumunun yolunu

HKEY_CLASSES_ROOT \ Python.File Buradaki anahtarlar, bir .py dosyasına uygulanması dışında Python.CompiledFile ile aynıdır. Yine ilgili değişiklikleri yapın. 'IDLE ile düzenle' veya 'Pythonwin ile düzenle' için fazladan bir anahtar olabilir. Yine, ilgili değişiklikleri yapın, böylece bu anahtarlardaki yollar istediğiniz python sürümüne işaret eder.

HKEY_CLASSES_ROOT \ Python.NoConFile Bunlar Python.File ile aynıdır, ancak pythonw.exeprogramın uygun olduğu yere işaret etmelidir.

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1 PythonDir bu ESRI tarafından yüklenen olarak piton yüklemesi gibi kalır, ya da yeni bir tesisat ile işaret etmek için ArcMap vb içinde kullanılmak üzere piton yüklemesine anahtar nokta .. Sen isteyebilirler. Bu olabilir yeni piton yüklemesine ArcMap'i işaret etmesi durumunda diğer değişiklikleri gerektirir. Orada olabilecek yeni dağıtım tarafından yüklenen paketlerin sürümleri (örneğin numpy) ile ilgili sorunlar olabilir. Ben hiç karşılaşmadım.

Çalışmalarımın çoğunda, tipik olarak kendi başına python kullanmak istediğim ve bazen arcpy'e erişebildiğim için bu benim için önemli değil. Nadiren arpmap içinden python kullanmak istiyorum ... Bu yüzden bu son adımı çok az test ettim, ama şimdiye kadar denediğim her şey için işe yarıyor gibi görünüyor.

İşlemin Python (x, y) vb. Yüklemek için benzer olacağını hayal ediyorum.

Diğer notlar

.Pth dosyasının içeriği, ArcGIS kurulumunuzdaki aşağıdaki klasörlere işaret eden yolların listesidir: bin64, arcpy, ArcToolbox \ Scripts Örneğin, .pth dosyam şunları içerir:

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


ArcGIS'in sahip olduğu tüm Python bağımlılıklarını kuruyor mu? matplotlib, numpy, xlrd, xlwt ve dateutil?
KHibma

Evet. Anaconda dağıtımı için, paketlerin tam bir listesini burada bulabilirsiniz: docs.continuum.io/anaconda/pkgs.html Python (x, y) veya diğer dağıtımlar hakkında aşina değilim
James

2
ArcGIS'in (10.2 ve 10.1) numpy için çok özel sürüm gereksinimleri olduğunu unutmayın - 1.6.1 olmalı ya da arcpy'yi bozabilirsiniz.
user2856

1
Lütfen DTBGGP64.pth dosyasının içeriğini ekleyin! Birçok kullanıcı buna sahip görünmüyor. :)
mmann1123

1
Anaconda'nın gerçekten güzel bir özelliği, ArcGIS veya başka bir paket için ihtiyaç duyduğunuz sürümlerle sanal ortamları kurabilmenizdir. Örneğin, Esri araçlarının beklediği sürümlere sahip olan ArcGIS ile çalışmak üzere ayarlanmış sanal bir ortamınız ve tamamen arcgis dışında çalışırken arcpy içermeyen bir ortam olabilir.
Curtis Fiyatı

5

Benim çözümüm, kullandığınız python ortamına göre yol kümelerini ayarlayan bir başlangıç ​​betiği oluşturmaktır. Bu yöntem, python kurulumlarında .pth dosyalarını yazmak için yönetici erişimine ihtiyaç duymamanızın (devasa) avantajına sahiptir. Bu komut dosyası hem 32 bit hem de 64 bit Anaconda ve ArcGIS / arcpy kullanacak şekilde ayarlanmıştır.

    # 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

Virtualenv için bu strartup betiğini diğer .py betiklerinde nasıl ayarlıyor / çağırıyorsunuz? örneğin, sadece "arcpy.CopyFeatures_management ('myinput.shp', 'myoutput.shp')" olan bir .py betiğiniz varsa? Basitleştirilmiş ders örneği. Herhangi bir tavsiye için Thx
AlexS1

3

Herhangi birinin ArcGIS Pro kullanarak (örneğin python 2 yerine python 3 ile) bunu yapmaya çalışıyor olması halinde:

Anaconda paketinde spyder kullanıyorum. Bunu yapmamın yolu, Spyder'daki Araçlar> Python Tercümanına gidip, Spyder'ı şu anda C: \ Program Files \ ArcGIS \ Pro \ bin \ Python \ Scripts \ propy.bat konumunda bulunan propy.bat dosyasına yönlendirmektir.

Bu, Spyder'da doğru python sürümünü etkinleştirir ve arcpy'yi içe aktarmanıza izin verir.


1

Arcpy ve bağımlılıklarını içeren ayrı bir Sanal Ortam oluşturmak için aşağıdaki kodu kullanıyorum :

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.