ทำการติดตั้ง Python แยกต่างหากที่สามารถโทรหา ArcPy ได้หรือไม่?


28

ฉันเห็นคำถามมากมาย & ถามว่าคุณสามารถสร้างการติดตั้ง Python แยกต่างหาก (เช่นการกระจาย Anaconda หรือ Python XY) ที่สามารถใช้ arcpy ได้อย่างไรในขณะที่ไม่ 'ทำลาย' การติดตั้ง ArcGIS ดั้งเดิมหลาม

ฉันมีปัญหาเดียวกันนี้และฉันคิดว่าฉันพบวิธีแก้ปัญหาที่เป็นสากลแล้ว จนถึงตอนนี้เราได้ทำสิ่งนี้ในคอมพิวเตอร์ประมาณ 8 เครื่องในที่ทำงานและมันก็ใช้ได้ดี

จะติดตั้ง Python แบบแยกส่วนที่สามารถใช้ ArcGIS ได้อย่างไร?

คำตอบ:


37

ฉันสร้างโมดูลขนาดเล็ก (และค่อนข้างเป็นที่นิยม) ซึ่งจะดับและตามล่าหา ArcGIS บนพีซีของคุณ เมื่อพบว่ามันเพิ่มเส้นทางที่ถูกต้องไปยังสภาพแวดล้อมเพื่อให้คุณสามารถนำเข้า arcpy การใช้งานจะเป็นดังนี้:

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

โมดูลโฮสต์บน github ที่นี่: https://github.com/JamesRamm/archook

มันง่ายมากและฉันแน่ใจว่าสามารถสร้างความแข็งแกร่งได้มากขึ้น แต่ทำงานได้ดี มันมีอยู่ใน pypi:pip install archook

มันมีข้อดีมากกว่าวิธีดั้งเดิม 'ด้วยตนเอง' เพิ่มเติม (รายละเอียดด้านล่าง):

  1. คุณไม่จำเป็นต้องกำหนดค่าแต่ละสภาพแวดล้อมของหลาม ... เพียงแค่นำเข้าโมดูลและคุณไม่ต้องไป
  2. มันไม่ได้แก้ไข / สร้างรีจิสตรีคีย์หรือตัวแปรสภาพแวดล้อมถาวรดังนั้นจึงไม่มีโอกาสที่จะทำให้การกำหนดค่า python / arcgis ที่มีอยู่
  3. คุณไม่จำเป็นต้องรู้อะไรเกี่ยวกับเส้นทางไปยังโฟลเดอร์ / ไฟล์ต่าง ๆ หรือแม้แต่เวอร์ชั่น arcgis ที่คุณติดตั้ง โมดูลจะค้นหาทุกอย่างให้คุณ
  4. ไม่จำเป็นต้องมีการตรวจสอบสิทธิ์ผู้ดูแลระบบ
  5. มันไม่ได้เฉพาะเจาะจงกับแอนนาคอนดา แต่มันจะทำงานกับการติดตั้งไพ ธ อนใด ๆ

ฉันได้ทิ้งคำตอบดั้งเดิมไว้ด้านล่าง แต่โซลูชันนี้ (IMO) ดีกว่า 100%


2014 ตอบ

ตกลงดังนั้นคำตอบนี้ใช้ได้กับการแจกจ่ายงูใหญ่ 64 บิตกับงูเหลือม ArcGIS 10.1 64 บิตบน Windows 7 / Windows Server เคล็ดลับบางส่วน (หรือทั้งหมด) ที่ให้ไว้ด้านล่างอาจมีผลกับการแจกจ่าย python ของ windows อื่น ๆ ก่อนอื่นให้ติดตั้งแอนนาคอนดามันไปที่ไดเรคทอรี C: \ Anaconda ทำเครื่องหมายที่ช่อง 'make python เริ่มต้นของระบบ' อาจให้คำเตือนว่ามีการติดตั้งไพ ธ อนอื่น แต่ดำเนินการต่อ แล้ว:

เส้นทางการตั้งค่าและตัวแปรสภาพแวดล้อม

สิ่งแรกที่ทำคือการคัดลอกในช่วงDTBGGP64.pthไฟล์ไปยังไดเรกทอรีจัดจำหน่ายใหม่ ( C: \ งู ) จากC: \ Python27 \ ArcGISx6410.1 \ Lib \ เว็บไซต์แพคเกจ การตั้งชื่อนั้นไม่แน่นอน แต่ต้องมีนามสกุล. pthซึ่งจะช่วยให้คุณสามารถนำเข้า ArcPy เมื่อใช้การกระจายใหม่ หมายเหตุ: ตำแหน่งที่ถูกต้องของไฟล์ DTBGGP64.pth ควรอยู่ในไดเรกทอรีแพ็คเกจเว็บไซต์ (เช่นC: \ Anaconda \ Libs \ site-packages ) ฉันได้พบว่าด้วย Anaconda รุ่นเก่าบางรุ่นมันทำงานได้ถ้านั่งในไดเรกทอรีระดับบนสุด ถัดไปต้องตรวจสอบตัวแปรสภาพแวดล้อม: ในเส้นทางตัวแปรระบบเส้นทางที่มีอยู่ไปยังไดเรกทอรี python ควรถูกแทนที่ด้วยเส้นทางใหม่ (เช่นC: \ Anaconda; C: \ Anaconda \ Scripts; ) หน้าต่างนี้จะบอกตำแหน่งของไดเรกทอรีไพ ธ อนเริ่มต้น ตรวจสอบให้แน่ใจว่าตัวแปรผู้ใช้PYTHONPATHนั้นถูกต้องเช่นกัน นี้ควรชี้ไปที่ห้องสมุดใด ๆ ที่คุณต้องการใช้งานที่ไม่ได้อธิบายโดย.pthไฟล์หรือมีการติดตั้งในเว็บไซต์แพคเกจ IE อาจเป็นแพ็คเกจการพัฒนาของคุณเองหรือแพ็คเกจเช่นmapnikซึ่งมีตำแหน่งการติดตั้งที่แตกต่างกัน

ตรวจสอบการตั้งค่ารีจิสทรี

ในเครื่องบางเครื่องข้างต้นอาจเพียงพอที่จะให้แน่ใจว่าคุณสามารถใช้ arcpy จาก python ใหม่และสามารถใช้ python ภายใน ArcGIS ในเครื่องอื่นคุณอาจต้องตรวจสอบรีจิสตรีคีย์ รีจิสตรีคีย์ต่อไปนี้มีการตั้งค่าหลาม:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
ควรมีหนึ่งคีย์และค่า 'ควรเป็นC: \ Anaconda \ Lib; C: \ Anaconda \ DLLs (หรือโฟลเดอร์ที่เกี่ยวข้องสำหรับการติดตั้ง Python ของคุณ)

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
กุญแจควรเป็นC: \ Anaconda

คุณอาจติดตั้งรุ่นไพ ธ อนอื่น ... ซึ่งในกรณีนี้จะเปลี่ยนหมายเลขเวอร์ชันในพา ธ ด้านบน

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon นี่คือตำแหน่งของไฟล์. ico ที่จะใช้สำหรับไฟล์. pyc

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ command นี่คือคำสั่งที่จะออกเมื่อเปิดไฟล์. pyc จากเชลล์ คุณควรเปลี่ยนpython.exeเส้นทางไปยังตำแหน่งของรุ่นไพ ธ อนที่คุณต้องการ

HKEY_CLASSES_ROOT \ Python.File ปุ่มที่นี่เหมือนกันกับ Python.CompiledFile ยกเว้นว่าจะใช้กับไฟล์. py อีกครั้งทำการเปลี่ยนแปลงที่เกี่ยวข้อง อาจมีคีย์พิเศษสำหรับ 'แก้ไขด้วย IDLE' หรือ 'แก้ไขด้วย Pythonwin' อีกครั้งทำการเปลี่ยนแปลงที่เกี่ยวข้องเพื่อให้เส้นทางในปุ่มเหล่านี้ชี้ไปที่รุ่นหลามที่คุณต้องการ

HKEY_CLASSES_ROOT \ Python.NoConFile สิ่ง เหล่านี้เหมือนกับ Python.File แต่ควรชี้ไปที่pythonw.exeโปรแกรมตามความเหมาะสม

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1 PythonDirจุดสำคัญของการติดตั้งหลามเพื่อการใช้งานภายใน ArcMap ฯลฯ .. คุณอาจต้องการสำหรับเรื่องนี้ยังคงเป็นที่ติดตั้งหลามเป็นติดตั้งโดย ESRI หรือชี้ไปติดตั้งใหม่ของคุณ มันอาจต้องมีการเปลี่ยนแปลงอื่น ๆ ถ้าคุณชี้ ArcMap ไปที่การติดตั้งหลามใหม่ มีอาจจะมีปัญหากับรุ่นของแพคเกจ (เช่น numpy) ติดตั้งโดยจัดจำหน่ายใหม่ ฉันไม่เคยเจอเลย

สำหรับงานส่วนใหญ่ของฉันนี่ไม่เกี่ยวข้องเพราะฉันมักจะต้องการใช้ python ของมันเองและบางครั้งก็สามารถเข้าถึง arcpy ได้ ฉันไม่ค่อยต้องการใช้ python จากภายใน arcmap .. ดังนั้นฉันจึงทำการทดสอบขั้นตอนสุดท้ายนี้เล็กน้อย แต่ดูเหมือนจะใช้ได้กับทุกสิ่งที่ฉันได้ลองมาแล้ว

ฉันคิดว่ากระบวนการนี้จะคล้ายกับการติดตั้ง Python (x, y) เป็นต้น

บันทึกอื่น ๆ

เนื้อหาของไฟล์. pth เป็นรายการพา ธ ที่ชี้ไปยังโฟลเดอร์ต่อไปนี้ในการติดตั้ง ArcGIS ของคุณ: bin64, arcpy, ArcToolbox \ Scripts ตัวอย่างเช่นไฟล์. pth ของฉันมีดังต่อไปนี้:

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


สิ่งนี้จะติดตั้งการพึ่งพา Python ทั้งหมดของ ArcGIS หรือไม่ matplotlib, numpy, xlrd, xlwt และ dateutil?
KHibma

ใช่. สำหรับการแจกจ่ายอนาคอนดาสามารถดูรายการแพคเกจทั้งหมดได้ที่นี่: docs.continuum.io/anaconda/pkgs.htmlฉันไม่คุ้นเคยกับ Python (x, y) หรือดิสทริบิวชันอื่น ๆ
James

2
อย่าลืมว่า ArcGIS (10.2 และ 10.1) มีข้อกำหนดรุ่นที่เฉพาะเจาะจงมากสำหรับจำนวน - ต้องเป็น 1.6.1 หรือคุณสามารถแยกอาร์คปีได้
2856

1
โปรดเพิ่มเนื้อหาของไฟล์ DTBGGP64.pth! ผู้ใช้หลายคนดูเหมือนจะไม่ได้รับสิ่งนี้ :)
mmann1123

1
คุณสมบัติที่ดีจริงๆของอนาคอนด้าคือคุณสามารถตั้งค่ากับสภาพแวดล้อมเสมือนกับเวอร์ชันที่คุณต้องการสำหรับ ArcGIS หรือแพ็คเกจอื่น ๆ ตัวอย่างเช่นคุณอาจมีสภาพแวดล้อมเสมือนตั้งค่าให้ทำงานกับ ArcGIS ที่มีรุ่นที่เครื่องมือ Esri คาดไว้และอีกอันที่ไม่รวม arcpy เมื่อทำงานนอก Arcgis โดยสิ้นเชิง
เคอร์ติสราคา

5

วิธีแก้ปัญหาของฉันคือการตั้งค่าสคริปต์เริ่มต้นที่กำหนดเส้นทางตามสภาพแวดล้อมที่คุณใช้ วิธีนี้มีข้อดี (มาก) ที่คุณไม่ต้องการให้ผู้ดูแลระบบเข้าถึงเพื่อเขียนไฟล์. pth ในการติดตั้งหลาม สคริปต์นี้ถูกตั้งค่าให้ใช้ Anaconda และ ArcGIS / arcpy ทั้ง 32 บิตและ 64 บิต

    # 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

คุณตั้งค่า / เรียกสคริปต์ strartup นี้สำหรับ virtualenv ในสคริปต์. py อื่น ๆ ได้อย่างไร? ตัวอย่างเช่นหากคุณเพิ่งมีสคริปต์. py นั่นคือ "arcpy.CopyFeatures_management ('myinput.shp', 'myoutput.shp')"? ตัวอย่างที่ง่ายแน่นอน ขอบคุณสำหรับคำแนะนำใด ๆ
AlexS1

3

ในกรณีที่ทุกคนพยายามทำเช่นนี้โดยใช้ ArcGIS Pro (เช่นกับ python 3 แทนที่จะเป็น python 2):

ฉันใช้ Spyder ในแพ็คเกจงูใหญ่ วิธีที่ฉันใช้ในการทำงานคือไปที่เครื่องมือ> Python Interpreter ใน Spyder จากนั้นชี้ Spyder ไปที่ไฟล์ propy.bat ซึ่งอยู่ที่ C: \ Program Files \ ArcGIS \ Pro \ bin \ Python \ Scripts \ propy.bat

เป็นการเปิดใช้งานเวอร์ชันงูหลามที่ถูกต้องใน Spyder และอนุญาตให้คุณนำเข้า arcpy


1

ฉันใช้รหัสต่อไปนี้เพื่อตั้งค่าสภาพแวดล้อมเสมือนแยกต่างหากที่มี arcpy และมันขึ้นอยู่กับ:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.