ArcPyを呼び出すことができる個別のPythonインストールを作成しますか?


28

オリジナルのArcGIS pythonインストールを「壊す」ことなく、arcpyを使用できる個別のPythonインストール(AnacondaやPython XYディストリビューションなど)を作成する方法を尋ねるQ&Aがたくさんあります。

私はこれと同じ問題を抱えていましたが、「普遍的な」解決策を見つけたと思います。これまでのところ、作業中の約8台のコンピューターでこれを実行しましたが、すべて正常に動作します。

ArcGISを使用できる別のPythonディストリビューションをインストールする方法は?

回答:


37

私はあなたのPCで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. 各Python環境を個別に設定する必要はありません...モジュールをインポートして、すぐに始めてください
  2. レジストリキーや永続的な環境変数は編集/作成されないため、既存のpython / arcgis設定を台無しにする可能性はありません
  3. さまざまなフォルダ/ファイルへのパスについて、またはインストールしたarcgisのバージョンについても何も知る必要はありません。モジュールはあなたのためにそれをすべて見つけます。
  4. 管理者認証は不要
  5. anacondaに固有のものではありません-どのPythonインストールでも動作します

以下に元の答えを残しましたが、この解決策は(IMO)100%優れています。


2014年の回答

それでは、この回答は、Windows 7 / Windows Server上のArcGIS 10.1 64ビットを使用したAnaconda 64ビットPythonディストリビューションで機能します。下記のヒントの一部(またはすべて)は、Pythonの他のWindowsディストリビューションに適用される場合があります。最初に、anacondaをインストールします。C:\ Anacondaディレクトリに移動します。[システムをデフォルトのPythonにする]チェックボックスをオンにします。別のpythonがインストールされているという警告が表示される場合がありますが、続行します。次に:

セットアップパスと環境変数

最初に行うことは、DTBGGP64.pthファイルをC:\ Python27 \ ArcGISx6410.1 \ Lib \ site-packagesから新しい配布ディレクトリ(C:\ Anaconda)にコピーすることです。命名は任意ですが、.pth拡張子が必要です。これにより、新しいディストリビューションを使用するときにArcPyをインポートできます。 注:DTBGGP64.pthファイルの正しい場所は、site-packagesディレクトリ(C:\ Anaconda \ Libs \ site-packagesなど)にある必要があります。私は土がトップレベルのディレクトリにある場合はアナコンダの一部の古いバージョンでは、それが動作することを発見した システム変数で:次に、環境変数をチェックする必要がありますパス、Pythonディレクトリへの既存のパスを新しいパスに置き換える必要があります。(例:C:\ Anaconda; C:\ Anaconda \ Scripts;)これにより、デフォルトのpythonディレクトリの場所がウィンドウに通知されます。ユーザー変数PYTHONPATHも正しいことを確認してください。これは、.pthファイルで記述されていないか、site-packagesにインストールされている、使用するライブラリを指している必要があります。IEこれは、独自の開発パッケージ、またはインストール場所が異なるmapnikなどのパッケージです。

レジストリ設定を確認する

一部のマシンでは、新しいPythonからarcpyを使用し、ArcGIS内でPythonを使用できるようにするには、上記で十分です。他のマシンでは、レジストリキーを確認する必要がある場合があります。次のレジストリキーにはpython設定があります。

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
1つのキーがあり、その値はC:\ Anaconda \ Lib; C:\ Anaconda \ DLLs (またはPythonインストールに対応するフォルダー)である必要があります

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
キーはC:\ Anacondaである必要があります

他のpythonバージョンがインストールされている可能性があります...その場合、上記のパスのバージョン番号を変更します

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon これは、.pycファイルに使用する.icoファイルの場所です。

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ command これは、シェルから.pycファイルを開くときに発行するコマンドです。python.exe目的のPythonバージョンの場所へのパスを変更する必要があります

HKEY_CLASSES_ROOT \ Python.File ここでのキーは、.pyファイルに適用されることを除いて、Python.CompiledFileのキーと同じです。繰り返しますが、関連する変更を行います。「IDLEで編集」または「Pythonwinで編集」のための追加のキーがあります。繰り返しますが、これらのキーのパスが目的のpythonバージョンを指すように、関連する変更を行います。

HKEY_CLASSES_ROOT \ Python.NoConFile これらはPython.Fileと同じですが、必要pythonw.exeに応じてプログラムを指す必要があります。

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1
ザ・PythonDirのArcMapなどの中で使用するPythonのインストールへのキーポイント..あなたは、ESRIによってインストールされたPythonインストールとして残るか、新しいインストールにそれを指すように、このために望むことができます。ArcMapに新しいPythonインストールを指定する場合、他の変更必要になる場合があります。新しいディストリビューションによってインストールされるパッケージのバージョン(numpyなど)に問題がある可能性があります。遭遇したことはありません。

私の仕事の大半では、これは無関係です。通常、Pythonを単独で使用し、場合によってはarcpyにアクセスしたいからです。arcmap内からpythonを使用することはめったにありません。したがって、この最終ステップのテストはほとんど行いませんでしたが、これまで試したすべての方法で動作するようです。

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


これにより、ArcGISにあるすべてのPython依存関係がインストールされますか?matplotlib、numpy、xlrd、xlwt、dateutil?
KHibma 14

はい。アナコンダの分布については、パッケージのの完全なリストはここで見つけることができます:docs.continuum.io/anaconda/pkgs.html私は、Pythonの(x、y)、または他のディストリビューションに精通していないです
ジェームズ・

2
ArcGIS(10.2および10.1)にはnumpyの非常に特定のバージョン要件があることを忘れないでください。1.6.1である必要があります。そうでない場合はarcpyを中断できます。
user2856 14

1
DTBGGP64.pthファイルの内容を追加してください!多くのユーザーはこれを持っていないようです。:)
mmann1123 14年

1
anacondaの本当に素晴らしい機能は、ArcGISまたは他のパッケージに必要なバージョンの仮想環境でセットアップできることです。たとえば、ArcGISで動作するようにEsriツールが想定しているバージョンの仮想環境と、arcgi以外で完全に動作するときにarcpyを含まない仮想環境を設定できます。
カーティス価格

5

私の解決策は、使用しているpython環境に基づいてパスを設定するスタートアップスクリプトを設定することです。この方法には、Pythonインストールで.pthファイルを書き込むために管理者アクセスが必要ないという(巨大な)利点があります。このスクリプトは、32ビットと64ビットの両方のAnacondaと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

他の.pyスクリプトのvirtualenvにこのstrartupスクリプトをどのように設定/呼び出しますか?たとえば、「arcpy.CopyFeatures_management( 'myinput.shp'、 'myoutput.shp')」である.pyスクリプトがある場合 もちろん簡単な例。アドバイスのためのThx
AlexS1

3

誰かがArcGIS Proを使用してこれを実行しようとしている場合(つまり、python 2ではなくpython 3を使用):

anacondaパッケージ内でspyderを使用します。これを機能させる方法は、Spyderの[ツール]> [Pythonインタープリター]に移動し、Spyderが現在C:\ Program Files \ ArcGIS \ Pro \ bin \ Python \ Scripts \ propy.batにあるpropy.batファイルを指すようにすることです。

これにより、Spyderで正しいPythonバージョンが有効になり、arcpyをインポートできます。


1

次のコードを使用して、arcpyとitの依存関係を含む個別の仮想環境をセットアップします。

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.