Answers:
我创建了一个小模块(相对流行),该模块可以在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
与更“手动”的原始方法(详细信息如下)相比,它具有一些优点:
我在下面留下了原始答案,但是此解决方案(IMO)更好100%。
2014年答案
好的,因此此答案适用于Windows 7 / Windows Server上具有ArcGIS 10.1 64bit的Anaconda 64位Python发行版。以下给出的一些(或全部)技巧可能适用于python的任何其他Windows发行版。首先,安装anaconda,它应该转到目录C:\ Anaconda。选中“将系统设为默认python”框。它可能会警告您安装了另一个python,但请继续。然后:
设置路径和环境变量
首先要做的是从C:\ Python27 \ ArcGISx6410.1 \ Lib \ site-packages将DTBGGP64.pth文件复制到新的分发目录(C:\ Anaconda)。命名是任意的,但必须具有.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中。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
这是从shell打开.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等使用。你可能希望通过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
我的解决方案是设置一个启动脚本,该脚本根据您使用的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
我使用以下代码来设置一个单独的虚拟环境,其中包含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