我看到很多问答,问您如何创建可以使用arcpy而又不“破坏”原始ArcGIS python安装的单独Python安装(例如Anaconda或Python XY发行版)。

同样的问题,我想我已经找到了“通用”解决方案。到目前为止,我们已经在大约8台工作的计算机上完成了此操作,并且一切正常。

如何安装可以使用ArcGIS的单独的Python发行版?

#1 楼

我创建了一个小模块(相对流行),该模块可以关闭并在您的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

与“手动”原始方法(以下详细介绍)相比,它具有一些优点:


您不需要分别配置每个python环境...只需导入模块,然后就可以使用
它不会编辑/创建任何注册表项或永久性环境变量,因此没有机会搞乱任何现有的python / arcgis组态。
您无需了解各种文件夹/文件的路径,甚至无需了解已安装的Arcgis版本。该模块将为您找到所有功能。
无需管理员身份验证
与anaconda无关-它可以与任何python安装一起使用

我在下面留下了原始答案,但此解决方案(IMO)改善了100%。


2014年答案


好,因此此答案适用于Anaconda 64位Python发行版Windows 7 / Windows Server上的ArcGIS 10.1 64位版本。
以下给出的一些(或全部)技巧可能适用于python的任何其他Windows发行版。
首先,安装anaconda,它应该转到目录C:\ Anaconda。选中“将系统设为默认python”框。它可能会警告您安装了另一个python,但请继续。然后:


设置路径和环境变量

要做的第一件事是将DTBGGP64.pth文件复制到新的分发目录(C:\ Anaconda ),从C:\ Python27 \ ArcGISx6410.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文件描述或未安装在站点程序包中。即IE,这可能是您自己的开发包,也可能是Mapnik等安装位置不同的包。

检查注册表设置

在某些计算机上,上述内容可能足以确保可以使用新python中的arcpy,并且可以在ArcGIS中使用python。
在其他计算机上,您可能需要检查注册表项。
以下注册表项具有python设置:

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

您可能还安装了其他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
此处的键与适用于的Python.CompiledFile相同。 py文件。再次进行相关更改。
它可能具有用于“使用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年2月18日在14:41

是。对于anaconda发行版,可以在此处找到软件包的完整列表:docs.continuum.io/anaconda/pkgs.html我对Python(x,y)或其他发行版不熟悉

–詹姆斯
2014-2-18 14:43



不要忘记,ArcGIS(10.2和10.1)对numpy有非常特定的版本要求-必须为1.6.1,否则您可以破坏arcpy。

–user2856
2014-02-18 23:22



请添加DTBGGP64.pth文件的内容!许多用户似乎没有这个。 :)

–mmann1123
14-10-28在21:29

anaconda的一个非常不错的功能是,您可以使用ArcGIS或任何其他软件包所需的版本在虚拟环境中进行设置。例如,您可以设置一个虚拟环境以与ArcGIS一起使用,该虚拟环境具有Esri工具期望的版本,而另一个环境则完全不在arcgis内工作时不包含arcpy。

– Curtis价格
15年2月13日在18:31

#2 楼

我的解决方案是设置一个启动脚本,该脚本根据您使用的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脚本?例如,如果您只有一个.py脚本为“ arcpy.CopyFeatures_management('myinput.shp','myoutput.shp')”?当然是简化的例子。感谢任何建议

– AlexS1
19年7月17日在15:14

#3 楼

如果有人尝试使用ArcGIS Pro(即使用python 3而不是python 2)进行此操作:

我在anaconda软件包中使用了spyder。我使用此方法的方法是转到Spyder中的“工具”>“ Python解释器”,然后将Spyder指向当前位于C:\ Program Files \ ArcGIS \ Pro \ bin \ Python \ Scripts \ propy.bat的propy.bat文件。

这会在Spyder中激活正确的python版本,并允许您导入arcpy。

#4 楼

我使用以下代码来设置一个单独的虚拟环境,其中包含arcpy及其依赖项: