Thực hiện cài đặt Python riêng có thể gọi ArcPy?


28

Tôi thấy rất nhiều câu hỏi và hỏi về cách bạn có thể tạo một bản cài đặt Python riêng (ví dụ: bản phân phối Anaconda hoặc Python XY) có thể sử dụng arcpy, trong khi không 'phá vỡ' bản cài đặt python gốc của ArcGIS.

Tôi đã có vấn đề tương tự, và tôi nghĩ rằng tôi đã tìm thấy một giải pháp 'phổ quát'. Cho đến nay chúng tôi đã thực hiện điều này trên khoảng 8 máy tính tại nơi làm việc và tất cả đều hoạt động tốt.

Làm cách nào để cài đặt một bản phân phối Python riêng có thể sử dụng ArcGIS?

Câu trả lời:


37

Tôi đã tạo một mô-đun nhỏ (và tương đối phổ biến) tắt và săn lùng ArcGIS trên PC của bạn. Khi tìm thấy nó thêm các đường dẫn chính xác đến môi trường để bạn có thể nhập Arcpy. Việc sử dụng diễn ra như sau:

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

Mô-đun được lưu trữ trên github tại đây: https://github.com/JamesRamm/archook

Nó rất đơn giản và tôi chắc chắn có thể được làm cho mạnh mẽ hơn, nhưng nó thực hiện công việc. Nó có sẵn trên pypi:pip install archook

Nó có một vài ưu điểm so với phương pháp ban đầu 'thủ công' hơn (chi tiết bên dưới):

  1. Bạn không cần phải cấu hình riêng từng môi trường python ... chỉ cần nhập mô-đun và tắt đi
  2. Nó không chỉnh sửa / tạo bất kỳ khóa đăng ký hoặc biến môi trường vĩnh viễn, do đó không có khả năng làm rối bất kỳ cấu hình python / arcgis hiện có.
  3. Bạn không cần biết gì về đường dẫn đến các thư mục / tệp khác nhau, hoặc thậm chí phiên bản arcgis nào bạn đã cài đặt. Các mô-đun sẽ tìm thấy tất cả cho bạn.
  4. Không cần xác thực quản trị viên
  5. Nó không cụ thể với anaconda - nó sẽ hoạt động với mọi cài đặt python

Tôi đã để lại câu trả lời ban đầu bên dưới, nhưng giải pháp này là (IMO) tốt hơn 100%.


Câu trả lời năm 2014

Ok, vì vậy câu trả lời này hoạt động cho bản phân phối Python Anaconda 64 bit với ArcGIS 10.1 64bit trên Windows 7 / Windows Server. Một số (hoặc tất cả) các mẹo được đưa ra dưới đây có thể áp dụng cho bất kỳ phân phối cửa sổ nào khác của python. Đầu tiên, cài đặt anaconda, nó sẽ vào thư mục C: \ Anaconda. Chọn hộp 'tạo hệ thống python mặc định'. Nó có thể đưa ra cảnh báo rằng có một con trăn khác được cài đặt, nhưng vẫn tiếp tục. Sau đó:

Đường dẫn thiết lập và biến môi trường

Điều đầu tiên cần làm là sao chép tệp DTBGGP64.pth sang thư mục phân phối mới ( C: \ Anaconda ) từ C: \ Python27 \ ArcGISx6410.1 \ Lib \ site-gói . Việc đặt tên là phổ biến, nhưng phải có phần mở rộng .pth Điều này sẽ cho phép bạn nhập ArcPy khi sử dụng bản phân phối mới. Lưu ý: Vị trí chính xác của tệp DTBGGP64.pth phải nằm trong thư mục gói trang web (ví dụ: C: \ Anaconda \ Libs \ site-gói ). Tôi đã thấy rằng với một số phiên bản cũ hơn của Anaconda, nó hoạt động nếu ngồi trong thư mục cấp cao nhất Tiếp theo, các biến môi trường phải được kiểm tra: Trong đường dẫn biến hệ thống, đường dẫn hiện có đến thư mục python nên được thay thế bằng đường dẫn mới. (ví dụ: C: \ Anaconda; C: \ Anaconda \ Sc scripts; ) Điều này sẽ cho các cửa sổ biết thư mục python mặc định là gì. Đảm bảo biến người dùng PYTHONPATH cũng chính xác. Điều này sẽ trỏ đến bất kỳ thư viện nào bạn muốn sử dụng không được mô tả bởi các tệp .pth hoặc được cài đặt trong các gói trang web . IE đây có thể là các gói phát triển của riêng bạn hoặc các gói như mapnik có vị trí cài đặt khác.

Kiểm tra cài đặt đăng ký

Trên một số máy, những điều trên có thể đủ để đảm bảo rằng bạn có thể sử dụng arcpy từ con trăn mới và con trăn đó có thể được sử dụng trong ArcGIS. Trên các máy khác, bạn có thể cần kiểm tra các khóa registry. Các khóa đăng ký sau có cài đặt python:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
Cần có một khóa và giá trị của nó phải là C: \ Anaconda \ Lib; C: \ Anaconda \ DLLs (Hoặc các thư mục tương ứng cho cài đặt python của bạn)

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
Khóa phải là C: \ Anaconda

Bạn có thể cài đặt các phiên bản python khác ... trong trường hợp này thay đổi số phiên bản trong các đường dẫn ở trên

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon Đây là vị trí của tệp .ico để sử dụng cho các tệp .pyc

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ lệnh Đây là lệnh phát hành khi mở tệp .pyc từ trình bao. Bạn nên thay đổi python.exeđường dẫn đến vị trí của phiên bản python mong muốn của bạn

HKEY_CLASSES_ROOT \ Python.File Các khóa ở đây giống như các khóa cho Python.CompiledFile ngoại trừ việc chúng áp dụng cho tệp .py. Một lần nữa, thực hiện các thay đổi có liên quan. Nó có thể có một phím phụ cho 'Chỉnh sửa bằng IDLE' hoặc 'Chỉnh sửa bằng Pythonwin'. Một lần nữa, thực hiện các thay đổi có liên quan để các đường dẫn trong các phím này trỏ đến phiên bản python mong muốn của bạn.

HKEY_CLASSES_ROOT \ Python.NoConFile Đây là giống như với Python.File, nhưng nên trỏ đến pythonw.exechương trình khi thích hợp.

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1
Khóa PythonDir trỏ đến cài đặt python để sử dụng trong ArcMap, v.v. Nó có thể yêu cầu các thay đổi khác nếu bạn trỏ ArcMap vào bản cài đặt python mới. Có thể có các vấn đề với các phiên bản của gói (ví dụ: numpy) được cài đặt bởi bản phân phối mới. Tôi chưa gặp phải bất kỳ.

Đối với phần lớn công việc của tôi, điều này không liên quan vì tôi thường muốn sử dụng python cho riêng mình và đôi khi có quyền truy cập vào Arcpy. Tôi hiếm khi muốn sử dụng python từ bên trong arcmap..Vì vậy, tôi đã thực hiện một thử nghiệm nhỏ về bước cuối cùng này, nhưng nó dường như hoạt động cho tất cả mọi thứ tôi đã thử cho đến nay.

Tôi tưởng tượng rằng quá trình này sẽ tương tự để cài đặt Python (x, y), v.v.

Ghi chú khác

Nội dung của tệp .pth là danh sách các đường dẫn trỏ đến các thư mục sau trong bản cài đặt ArcGIS của bạn: bin64, arcpy, ArcToolbox \ Sc scripts Ví dụ: tệp .pth của tôi chứa các mục sau:

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


Điều này có cài đặt tất cả các phụ thuộc Python mà ArcGIS có không? matplotlib, numpy, xlrd, xlwt và dateutil?
KHibma

Vâng. Đối với bản phân phối anaconda, có thể tìm thấy danh sách đầy đủ các gói ở đây: docs.cContuum.io/anaconda/pkgs.html Tôi không quen thuộc với Python (x, y) hoặc các bản phân phối khác
James

2
Đừng quên rằng ArcGIS (10.2 và 10.1) có các yêu cầu phiên bản rất cụ thể cho numpy - phải là 1.6.1 hoặc bạn có thể phá vỡ arcpy.
dùng2856

1
Vui lòng thêm nội dung của tệp DTBGGP64.pth! Nhiều người dùng dường như không có điều này. :)
mmann1123

1
Một tính năng thực sự hay của Anaconda là bạn có thể thiết lập nó với môi trường ảo với các phiên bản bạn cần cho ArcGIS hoặc bất kỳ gói nào khác. Ví dụ: bạn có thể có một môi trường ảo được thiết lập để hoạt động với ArcGIS có các phiên bản mà các công cụ Esri đang mong đợi và một phiên bản khác không bao gồm arcpy khi hoạt động hoàn toàn bên ngoài arcgis.
Giá của Curtis

5

Giải pháp của tôi là thiết lập một tập lệnh khởi động thiết lập đường dẫn dựa trên môi trường python mà bạn đang sử dụng. Phương pháp này có lợi thế (rất lớn) mà bạn không cần quyền truy cập của quản trị viên để ghi tệp .pth trong cài đặt python. Kịch bản này được thiết lập để sử dụng cả Anaconda 32 bit và 64 bit và 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

Làm thế nào bạn thiết lập / gọi tập lệnh strartup này cho virtualenv trong các tập lệnh .py khác? ví dụ: nếu bạn chỉ có một tập lệnh .py là "arcpy.CopyFeatures_man Quản lý ('myinput.shp', 'myoutput.shp')"? Ví dụ đơn giản hóa tất nhiên. Thx cho bất kỳ lời khuyên
AlexS1

3

Trong trường hợp bất cứ ai đang cố gắng làm điều này bằng ArcGIS Pro (tức là với python 3 thay vì python 2):

Tôi sử dụng spyder trong gói anaconda. Cách tôi làm việc này là bằng cách vào Công cụ> Trình thông dịch Python trong Spyder, sau đó trỏ Spyder vào tệp propy.bat hiện có tại C: \ Program Files \ ArcGIS \ Pro \ bin \ Python \ Sc scripts \ propy.bat.

Điều này kích hoạt phiên bản python chính xác trong Spyder và cho phép bạn nhập Arcpy.


1

Tôi sử dụng đoạn mã sau để thiết lập một Môi trường ảo riêng biệt , chứa Arcpy và nó phụ thuộc:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.