Membuat instalasi Python terpisah yang bisa memanggil ArcPy?

28

Saya melihat banyak T&J menanyakan bagaimana Anda dapat membuat instalasi Python terpisah (mis. Distribusi Anaconda atau Python XY) yang dapat menggunakan arcpy, sementara tidak 'melanggar' instalasi python ArcGIS yang asli.

Saya memiliki masalah yang sama, dan saya pikir saya telah menemukan solusi 'universal'. Sejauh ini kami telah melakukan ini pada sekitar 8 komputer di tempat kerja dan semuanya bekerja dengan baik.

Bagaimana cara menginstal distribusi Python terpisah yang dapat menggunakan ArcGIS?

James
sumber

Jawaban:

37

Saya membuat modul kecil (dan relatif populer) yang berbunyi dan mencari ArcGIS di PC Anda. Setelah menemukannya, ia menambahkan jalur yang benar ke lingkungan sehingga Anda dapat mengimpor arcpy. Penggunaannya seperti ini:

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

Modul di-host di github di sini: https://github.com/JamesRamm/archook

Ini sangat sederhana dan saya yakin bisa dibuat lebih kuat, tetapi berhasil. Ini tersedia di pypi:pip install archook

Ini memiliki beberapa keunggulan dibandingkan metode asli yang lebih 'manual' (dirinci di bawah):

  1. Anda tidak perlu mengkonfigurasi setiap lingkungan python secara terpisah ... cukup impor modul dan pergilah
  2. Itu tidak mengedit / membuat kunci registri atau variabel lingkungan permanen, sehingga tidak ada kemungkinan mengacaukan konfigurasi python / arcgis yang ada.
  3. Anda tidak perlu tahu apa-apa tentang jalur ke berbagai folder / file, atau bahkan versi arcgis apa yang telah Anda instal. Modul ini akan menemukan semuanya untuk Anda.
  4. Tidak diperlukan otentikasi admin
  5. Ini tidak spesifik dengan anaconda - ini akan bekerja dengan instalasi python

Saya telah meninggalkan jawaban asli di bawah ini, tetapi solusi ini (IMO) 100% lebih baik.


2014 jawabannya

Oke, jadi jawaban ini berfungsi untuk distribusi Python Anaconda 64bit dengan ArcGIS 10.1 64bit pada Windows 7 / Windows Server. Beberapa (atau semua) tips yang diberikan di bawah ini mungkin berlaku untuk distribusi jendela python lainnya. Pertama, instal anaconda, itu harus pergi ke direktori C: \ Anaconda. Centang kotak 'make system default python'. Mungkin memberi peringatan bahwa ada python lain yang diinstal, tetapi lanjutkan. Kemudian:

Setup Paths and Variabel Lingkungan

Hal pertama yang harus dilakukan adalah menyalin file DTBGGP64.pth ke direktori distribusi baru ( C: \ Anaconda ) dari C: \ Python27 \ ArcGISx6410.1 \ Lib-situs-paket . Penamaannya sangat acak, tetapi harus memiliki ekstensi .pth. Ini memungkinkan Anda untuk mengimpor ArcPy saat menggunakan distribusi baru. Catatan: Lokasi file DTBGGP64.pth yang benar harus ada di direktori paket situs (mis. C: \ Anaconda \ Libs \ paket-situs ). Saya telah menemukan bahwa dengan beberapa versi Anaconda yang lebih lama, ia berfungsi jika duduk di direktori tingkat atas Selanjutnya, variabel lingkungan harus diperiksa: Pada variabel sistem Path, jalur yang ada ke direktori python harus diganti dengan jalur baru. (misal C: \ Anaconda; C: \ Anaconda \ Scripts;) Ini akan memberitahu windows di mana direktori python default berada Pastikan variabel pengguna PYTHONPATH juga benar. Ini harus menunjuk ke pustaka yang ingin Anda gunakan yang tidak dijelaskan oleh file .pth atau diinstal dalam paket situs . Yaitu ini mungkin paket pengembangan Anda sendiri, atau paket seperti mapnik yang memiliki lokasi instalasi berbeda.

Periksa Pengaturan Registri

Pada beberapa mesin, hal di atas mungkin cukup untuk memastikan bahwa Anda dapat menggunakan arcpy dari python baru dan bahwa python dapat digunakan di dalam ArcGIS. Di komputer lain, Anda mungkin perlu memeriksa kunci registri. Kunci registri berikut memiliki pengaturan python:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
Seharusnya ada satu kunci dan nilainya harus C: \ Anaconda \ Lib; C: \ Anaconda \ DLLs (Atau folder yang sesuai untuk instalasi python Anda)

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
Kuncinya adalah C: \ Anaconda

Anda mungkin menginstal versi python lain ... yang mana mengubah nomor versi di jalur di atas

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon Ini adalah lokasi file .ico yang akan digunakan untuk file .pyc

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ command Ini adalah perintah untuk mengeluarkan saat membuka file .pyc dari shell. Anda harus mengubah python.exejalur ke lokasi versi python yang Anda inginkan

HKEY_CLASSES_ROOT \ Python.File Kunci-kunci di sini sama dengan kunci untuk Python.CompiledFile, kecuali bahwa itu berlaku untuk file .py. Sekali lagi, buat perubahan yang relevan. Mungkin memiliki kunci tambahan untuk 'Edit dengan IDLE' atau 'Edit dengan Pythonwin'. Sekali lagi, buat perubahan yang relevan sehingga jalur di tombol ini menunjuk ke versi python yang Anda inginkan.

HKEY_CLASSES_ROOT \ Python.NoConFile Ini sama dengan untuk Python.File, tetapi harus menunjuk ke pythonw.exeprogram yang sesuai.

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1
The PythonDir poin kunci untuk instalasi python untuk digunakan dalam ArcMap dll .. Anda mungkin ingin untuk ini untuk tetap sebagai instalasi python sebagai diinstal oleh ESRI, atau arahkan ke instalasi baru Anda. Ini mungkin memerlukan perubahan lain jika Anda menunjuk ArcMap untuk instalasi python baru. Ada mungkin ada masalah dengan versi paket (misalnya numpy) diinstal oleh distribusi baru. Saya belum pernah menemukan.

Untuk sebagian besar pekerjaan saya, ini tidak relevan karena saya biasanya ingin menggunakan python sendiri dan kadang-kadang memiliki akses ke arcpy. Saya jarang ingin menggunakan python dari dalam arcmap..Oleh karena itu saya telah melakukan sedikit pengujian pada langkah terakhir ini, tetapi tampaknya bekerja untuk semua yang saya coba sejauh ini.

Saya membayangkan bahwa prosesnya akan mirip untuk menginstal Python (x, y) dll.

Catatan lain

Isi file .pth adalah daftar lintasan yang menunjuk ke folder berikut dalam instalasi ArcGIS Anda: bin64, arcpy, ArcToolbox \ Scripts Sebagai contoh, file .pth saya berisi yang berikut ini:

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
sumber
Apakah ini menginstal semua dependensi Python yang dimiliki ArcGIS? matplotlib, numpy, xlrd, xlwt dan dateutil?
KHibma
Iya nih. Untuk distribusi anaconda, daftar lengkap paket dapat ditemukan di sini: docs.continuum.io/anaconda/pkgs.html Saya tidak begitu akrab dengan Python (x, y) atau distribusi lainnya
James
2
Jangan lupa bahwa ArcGIS (10.2 dan 10.1) memiliki persyaratan versi yang sangat spesifik untuk numpy - harus 1.6.1 atau Anda dapat memecahkan arcpy.
user2856
1
Silakan tambahkan konten file DTBGGP64.pth! Banyak pengguna tampaknya tidak memiliki ini. :)
mmann1123
1
Fitur anaconda yang sangat bagus adalah Anda dapat mengaturnya dengan lingkungan virtual dengan versi yang Anda butuhkan untuk ArcGIS atau paket lainnya. Misalnya, Anda bisa mengatur lingkungan virtual untuk bekerja dengan ArcGIS yang memiliki versi yang diharapkan oleh alat-alat Esri, dan satu lagi yang tidak termasuk arcpy ketika bekerja sepenuhnya di luar arcgis.
Harga Curtis
5

Solusi saya adalah menyiapkan skrip startup yang menetapkan path berdasarkan pada lingkungan python yang Anda gunakan. Metode ini memiliki keuntungan (besar) bahwa Anda tidak memerlukan akses admin untuk menulis file .pth dalam instalasi python. Script ini dibuat untuk menggunakan Anaconda 32 bit dan 64 bit dan 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
Harga Curtis
sumber
Bagaimana Anda mengatur / memanggil skrip strartup ini untuk virtualenv di skrip .py lainnya? misalnya, jika Anda hanya memiliki skrip .py yang adalah "arcpy.CopyFeatures_management ('myinput.shp', 'myoutput.shp')"? Contoh yang disederhanakan tentu saja. Terima kasih untuk saran
AlexS1
3

Jika ada orang yang mencoba melakukan ini menggunakan ArcGIS Pro (yaitu dengan python 3 bukannya python 2):

Saya menggunakan spyder dalam paket anaconda. Cara saya menjalankan ini adalah dengan membuka Tools> Python Interpreter di Spyder, kemudian mengarahkan Spyder ke file propy.bat yang saat ini terletak di C: \ Program Files \ ArcGIS \ Pro \ bin \ Python \ Scripts \ propy.bat.

Ini mengaktifkan versi python yang benar di Spyder dan memungkinkan Anda untuk mengimpor arcpy.

T Lynch
sumber
1

Saya menggunakan kode berikut untuk menyiapkan Lingkungan Virtual yang terpisah , berisi arcpy dan dependensinya:

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
geografi
sumber