ArcPyを呼び出すことができるPythonのインストールを別に作成する

I see a lot of Q&As asking how you can create a separate Python installation (e.g. the Anaconda or Python XY distribution) that can use arcpy, while not 'breaking' the original ArcGIS python installation.

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

ArcGISを使用できる独立したPythonディストリビューションをインストールする方法

26
nl ru de

4 答え

私はあなたの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.

The module is hosted on github here: https://github.com/JamesRamm/archook

It is very simple and I'm sure can be made more robust, but it does the job. It is available on 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がインストールされているという警告を出すかもしれませんが、続行してください。その後:

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

最初に行うことは、 C:\ Python27 \から DTBGGP64.pth ファイルを新しい配布ディレクトリ( C:\ Anaconda )にコピーすることです。 ArcGISx 6410.1 \ Lib \ site-packages 。 命名は任意ですが、拡張子は .pth である必要があります これにより、新しいディストリビューションを使用するときにArcPyをインポートできます。 注:DTBGGP64.pthファイルの正しい場所はsite-packagesディレクトリにあります(例: C:\ Anaconda \ Libs \ site-packages )。私は、Anacondaのいくつかの古いバージョンでは、トップレベルディレクトリに座っていればうまくいくことを発見しました。 次に、環境変数を確認する必要があります。 システム変数 Path では、pythonディレクトリへの既存のパスを新しいパスに置き換える必要があります。 (例: C:\ Anaconda; C:\ Anaconda \ Scripts; ) これはwindowsにデフォルトのpythonディレクトリがどこにあるかを伝えます。 ユーザー変数 PYTHONPATH も正しいことを確認してください。これは、 .pth ファイルに記述されていない、または site-packages にインストールされている、使用したいライブラリをすべて指すはずです。 I.Eこれはあなた自身の開発パッケージ、あるいは mapnik のような異なるインストール場所を持つパッケージかもしれません。

レジストリ設定の確認

一部のコンピュータでは、上記の方法で新しいpythonのarcpyを使用できること、およびpythonをArcGIS内で使用できることを確認するのに十分かもしれません。 他のコンピュータでは、レジストリキーを確認する必要があります。 次のレジストリキーにはPythonの設定があります。

HKEY_LOCAL_MACHINE \ソフトウェア\ Python \ PythonCore \ 2.7 \ PythonPath
キーが1つあり、その値は C:\ Anaconda \ Lib; C:\ Anaconda \ DLLs になります。 (またはあなたのpythonインストールのための対応するフォルダ)

HKEY_LOCAL_MACHINE \ソフトウェア\ 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のものと同じです。再度、関連する変更を加えます。 'Edit with IDLE'または 'Edit with Pythonwin'のための追加のキーがあるかもしれません。繰り返しますが、これらのキーのパスが目的のPythonバージョンを指すように適切な変更を加えてください。

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

HKEY_LOCAL_MACHINE \ソフトウェア\ ESRI \ Python10.1
PythonDir キーは、ArcMapなどで使用するPythonインストールを指します。 あなたはこれをESRIによってインストールされたpythonインストールのままにしておくか、あなたの新しいインストールを指すようにしたいかもしれません。 ArcMapで新しいpythonインストールを指定している場合は、 他の変更が必要になる可能性があります。新しいディストリビューションによってインストールされたパッケージのバージョン(例えば、不格好)にはある問題があるかもしれません。私は一度も出会ったことがありません。

私の作品の大部分にとって、これは無関係です。私は通常pythonをそれ自身で使いたいと思い、時折arcpyにアクセスしたいと思うからです。私はこのpythonをarcmapの中から使うことはめったにありません。そのため、この最後のステップのテストはほとんど行いませんでしたが、これまでに試したすべてのものに対してうまくいくようです。

Python(x、y)などをインストールする場合も、このプロセスは似ていると思います。

他のメモ

The contents of the .pth file is a list of paths pointing to the following folders in your ArcGIS installation: bin64, arcpy, ArcToolbox\Scripts For example, my .pth file contains the following:

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

36
追加された
python64バックグラウンドジオプロセシングと同じように、この方法でarcmapの64処理を利用できることを確認できますか。
追加された 著者 Muxa,
これで、ArcGISにあるすべてのPython依存関係がインストールされますか? matplotlib、numpy、xlrd、xlwtおよびdateutil
追加された 著者 Galbrezu,
anacondaの非常に優れた機能は、ArcGISまたは他のパッケージに必要なバージョンの仮想環境でセットアップできることです。たとえば、Esriツールが想定しているバージョンのArcGISと、ArcGIS以外の場所で作業するときにArcpyを含まない仮想環境を設定することができます。
追加された 著者 Mason Bially,
ArcGIS(10.2および10.1)には、非常に具体的な numpyのバージョン要件 - 1.6.1である必要があります。そうしないとarcpyを壊すことができます。
追加された 著者 Luke,
Anaconda 1.9にはたくさんの1.8が付属しています。 Continuum Analyticsリポジトリからnumpy 1.6.2をインストールする必要があります。
追加された 著者 Luke,
あなたの経験から、あなたはAnacondaの64ビットバージョンの使用をお勧めですか? (ArcPyでの使用に関連して)
追加された 著者 Monica Cellio,
そして、その新しい2015モジュールは一度実行する必要がありますか、それともすべてのプロジェクトに含める必要がありますか?
追加された 著者 Monica Cellio,
DTBGGP64.pthファイルの内容を追加してください。多くのユーザーはこれを持っていないようです。 :)
追加された 著者 idbrii,
はい。 anacondaディストリビューションの場合、パッケージの完全なリストはここにあります。 anaconda/pkgs.html 私はPython(x、y)や他のディストリビューションには馴染みがありません
追加された 著者 Dennis Haarbrink,
私の経験から、あなたは誤った情報を与えています。上記の方法では、arcpyはArcGISの外部でも内部でも使用できます。もちろん、私はすべてのarcpy関数を試したわけではありませんが、仕事で広く使っています。私は現在何の問題もなくarcpy、numpy、numexpr、osgeo、shapely、fiona、multiprocessingおよびwxpythonを広範囲に使用する> 10000行のアプリケーションを書いています。上記のインストール方法では、ArcGISによって作成されたpythonインストールはそのまま残ります。
追加された 著者 Dennis Haarbrink,
さらに、このセットアップで作業している他の8人のユーザーでも問題ありません(arcpyではなくArcMapを介してArcToolsを広く使用しています)。厳密なテストを経る必要があることを確かめるために100%防弾ではないと言っていますが、現時点で私はそれが成功したことを非常に満足しています。
追加された 著者 Dennis Haarbrink,
私はそれを追加し、私の現在の知識を反映するように指示全体を編集しました。私はそれが完成したと信じていますし、(anacondaだけではなく)Windows上の外部のpythonディストリビューションでも動作するはずです
追加された 著者 Dennis Haarbrink,
他のpythonモジュールと同じようにインポートして get_arcpy 関数を呼び出します。あなたがどのように配布するかはあなた次第です(あなたがそれを各プロジェクトに含めるか、それを依存関係としてリストするかにかかわらず)。このファイルは現在ここにあります。 github.com/JamesRamm/archook
追加された 著者 Dennis Haarbrink,
@ smiller archookのようなサウンドはどのバージョンを好むかを指定するために変更が必要になるでしょう。私が覚えている限りでは、それは遭遇する最初のものだけを取ります。
追加された 著者 Dennis Haarbrink,
@ジェームズArcGIS DesktopとArcGIS Proの両方をインストールしている人におすすめのものはありますか。 archookは素晴らしい2.7バージョンを見つけましたが、必要なときに3.xバージョンを呼び出せるようにしたいです。
追加された 著者 Oscar,

私の解決策は、あなたが使用している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
4
追加された

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

I use spyder within the anaconda package. The way I got this to work was by going to Tools > Python Interpreter in Spyder, then pointing Spyder to the propy.bat file currently located at C:\Program Files\ArcGIS\Pro\bin\Python\Scripts\propy.bat.

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

3
追加された

次のコードを使用して、仮想環境、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
1
追加された