从 10.x 到 ArcGIS Pro 的 Python 迁移
与 ArcGIS Pro 结合使用 Python 的方式与包括 ArcGIS Desktop、ArcGIS Server 以及 ArcGIS Engine 在内的其他 ArcGIS 产品不同。
地理处理工具针对 Pro 分析工具可用于突出显示任何妨碍 Python 代码或基于 Python 的地理处理工具运行的问题。针对 Pro 分析工具使用 Python 2to3 实用程序来报告潜在迁移问题以及识别没有迁移到 ArcGIS Pro 的工具和功能。
对 arcpy 中的功能所做的更改
大多数地理处理工具将继续在 ArcGIS Pro 中可用,然而,有一些将无法使用。不包含 Coverage (arcpy.arc)、Parcel Fabric (arcpy.fabric)、Schematics (arcpy.schematics),以及 Tracking Analyst (arcpy.ta) 工具箱中所含的工具。其他工具箱中的其他工具也不可用。有关完整列表,请参阅 ArcGIS Pro 中不支持的工具列表。
arcpy.mapping 模块已被移除,并且已经在 ArcGIS Pro 中替换为 arcpy.mp 模块,以支持在 ArcGIS Pro 中的制图工作流。
arcpy.na 模块同样包含更改,多个更改与从 arcpy.mapping 到 arcpy.mp 的更改相关联。
升级到 Python 3
ArcGIS Pro 使用 Python 3。这是源自其他 ArcGIS 产品的重大变动,这些产品包括 ArcGIS Desktop、ArcGIS Server 和 ArcGIS Engine(已在 Python 2 产品线中应用并会继续应用各版本)。Python 3 产品线版本与 Python 2 产品线不兼容。虽然在本质上很多语言是相同的,但很多重要的详细信息已发生较大变化,包括字符串与字典的工作方式以及标准库的组织方式。
我们使用了五年的时间积极开发 Python 3,随着 Python 在线社区的移植,Python 3 与 Python 2 同时存在。此时,已经在 Python 3 中移植了大部分重要的第三方库,并且在 Python 在线社区中,达成了这样的共识,即所有新的开发工程都将在 Python 3 中完成。
如何才能在 ArcGIS Pro 和 Python 3 中使用我的脚本
重要的决策点在于您是否将更新 Python 代码以同时用在 10.x 和 ArcGIS Pro 中,或只用在 ArcGIS Pro中。如果您正在对代码执行从 Python 2 到 Python 3 的单向转换,可以使用 2to3 命令行实用程序自动执行大部分的过程。该实用程序对于 Python 2 和 3 均可用。要特别注意的是,2to3 虽然是极佳的工具,但是它并不是完整的解决方案(有时估计为 95% 有效的解决方案),并且可能有必要对其进行其他更改。如果您需要支持 Python 2 和 Python 3,有关同时支持这两个版本的策略,请参阅如下内容。
请记住,更简单的 Python 脚本可能完全不需要任何更改,也可以良好地运行。
下面各部分讨论您容易遇到的 Python 2 和 3 之间较为常见的一些差异。此外,关于移植到 Python 3 和迁移策略,可参考 http://python3porting.com/ 网站上 Lennart Regebro 的移植到 Python 3。请记住,编写能够在 Python 2 和 Python 3 中运行的脚本是完全有可能的。
标准库重组
如 Python PEP 3108 中所述,Python 3 包含对 Python 2 标准库的重要重组。这些更改中的大部分更改将涉及已移至不同位置或者作为某个已重命名模块一部分的功能。要编写同时在 Python 2 和 Python 3 中使用的代码,可以通过使用灵活导入(例如 urllib2 等模块的以下内容)处理这些差异。
try:
import urllib2 # Python 2
except ImportError:
import urllib.request as urllib2 # Python 3
print 语句和函数
在 Python 2 中,较为常见的语法错误原因之一是 print 语句到 print 函数的转换。幸运的是,已将 print 函数移植回 Python 2 并且可安全用于 Python 2 和 Python 3 中。
print('This will print safely in Python 2 and 3')
# print statements will only work in Python 2
# print 'Print statements will only print safely in Python 2'
__future__
在脚本顶部,导入 __future__ 标记以在一些新的 Python 3 规则中限制 Python 2 代码。在您的脚本使用这一产品线正确进行解析后,您就可以顺利实现 Python 3 兼容性。
from __future__ import print_function, unicode_literals, absolute_import
字典
从使用 dictionary.iteritems() 切换到 dictionary.items()(如果适用)。已经将 iteritems 从 Python 3 中移除,并且 items 的行为与 iteritems 过去的行为相似。上述操作同样适用于 range 和 xrange:已将 xrange 从 Python 3 中移除,并且 range 现在的行为与 xrange 相似。
字符串和编码
在 Python 3 中,当前引号中的内容都暗指 Unicode 字符串。字节数组取代了旧的 str 类型:http://docs.python.org/3/library/stdtypes.html#binaryseq。unicode_literals 导入会隐式地将 Python 2 中引号的内容转换为 Unicode。
Python 3 在处理字符编码方面更加严格。如果您尚未将脚本显式保存为 UTF-8,则请执行这一操作。在您脚本的顶部添加 # coding: utf-8 这样的代码行,以便告知 Python 脚本采用 UTF-8 编码格式。
io 模块
考虑查看 io 模块。该模块已引入 Python 2.6 并且随附于 Python 3 中;它以一种文本编码感知的方式提供用于处理众多输入和输出任务的简便方法。
不支持的数据格式
目前,ArcGIS Pro 不支持以下几种数据格式:栅格目录、几何网络、逻辑示意图数据集、地理数据库服务器、ArcMap 文档模板、ArcReader 文档、图表、切片地图包以及个人地理数据库。
从 10.x 到 ArcGIS Pro 的 Python 迁移的更多相关文章
- ArcGIS Pro 简明教程(4)工具和模型构建器
ArcGIS Pro 简明教程(4)工具和模型构建器 by 李远祥 工具箱中的工具 ArcGIS Pro 在1.3版本基本上已经继承了ArcMap的所有工具,而且会不断加入一些它自身才有的工具,例如适 ...
- ArcGIS Pro 简明教程(3)数据编辑
ArcGIS Pro 简明教程(3)数据编辑 by 李远祥 数据编辑是GIS中最常用的功能之一,ArcGIS Pro在GIS数据编辑上使用习惯有一定的改变,因此,本章可以重点看看一些编辑工具的使用和使 ...
- ArcGIS Pro 简明教程(1)Pro简介
ArcGIS Pro 简明教程(1)Pro简介 ArcGIS Pro已经发布了相当的一段时间了,截至笔者写这系列文章的时候已经是1.3版本了,已经是相当完善的一个版本,基本上已经完成了原来ArcGIS ...
- 10 Project 1: Erste Schritte in Python
10 Project 1: Erste Schritte in PythonAnimationIn den Projekten werden sie nicht nur statische Objek ...
- ArcGIS Pro开发Web3D应用(1)——环境搭建与初始实例
1.搭建环境 1.1 ArcGIS Web3D软件环境 ArcGIS Pro 2.0(必须) ArcGIS for Enterprise 10.5.1 (从10.5开始称呼为Enterprise)包括 ...
- ArcGIS Pro 中不可用的工具
有些可用于 ArcMap 之类的其他 ArcGIS Desktop 应用程序的地理处理工具在 ArcGIS Pro 中不可用.用于处理 ArcGIS Pro 所不支持的数据格式的地理处理工具已被移除, ...
- ArcGIS Pro体验04——菜单栏
对菜单栏进行熟悉一下: 1.地图菜单 剪切板(Clipboard):剪切(Cut).复制(Copy).粘贴(Paste),这些不用说了,在ArcMap中是放在"编辑"菜单下面的.当 ...
- ArcGIS Pro 自定义坐标系地图矢量切片制作
ArcGIS Pro从1.4版本起就支持自定义坐标系统地图的矢量切片制作了. 步骤: 1. 将地图有全图范围缩小到屏幕像素大约10*10像素的范围,然后记录下地图的比例尺.这一步十分关键,不然系统要经 ...
- 使用Arcgis Pro 发布矢量切片
ArcGIS Pro 中的任何地图或底图都可以创建矢量切片,但是有一些局限性和特殊注意事项.为创建矢量切片制作地图的重点是构建一个有效的地图,以快速绘制生成的切片. 软件环境 操作系统:Windows ...
随机推荐
- 【Distributed】分布式系统中遇到的问题
一.概述  大型互联网公司公司一般都采用服务器集群,这样就要实现多个服务器之间的通讯,在nginx实现负载均衡(分布式解决方案)服务器集群会产生那些问题? 分布式锁(基本)单纯的Lock锁或者syn ...
- node-exporter cpu使用率为负数
在prometheus利用公式:100 - (avg by (instance) (irate(node_cpu{instance="xxx", mode="idle&q ...
- 【python】使用plotly生成图表数据
安装 在 ubuntu 环境下,安装 plotly 很简单 python 版本2.7+ pip install plotly 绘图 在 plotly 网站注册后,可以直接将生成的图片保存到网站上,便于 ...
- 0006SpringBoot中@Configuration与@Bean联合使用
需求:将某个普通类做为组件注册到容器中,可通过如下办法 1.定义HelloService类 package springboot_test.springboot_test.service; publi ...
- Linux系统chmod 777 误操作目录权限 - 恢复方法
小白操作Linux,手抖导致误修改了系统文件和目录权限,导致系统宕机的修复. -R / -R / test 有的是真不懂,执行了上面的第一条命令,有的是懂,但是操作太快或者粗心大意,或者有乱敲空格的恶 ...
- git中的基本命令
工作区: 当前的编辑位置 缓存区: add 之后的区域 版本库: commit之后的区域就是版本库 git init . 初始化 git add . ...
- 再论i++ ++i
#include <stdio.h> int main(void) { char acData[5] ={'A','B','C','D','E'}; char *pcData = NULL ...
- HDU-1160-FatMouse's Speed(DP, 最长递增子序列)
链接: https://vjudge.net/problem/HDU-1160 题意: FatMouse believes that the fatter a mouse is, the faster ...
- [Google Guava] 11-事件总线
原文链接 译文连接 译者:沈义扬 传统上,Java的进程内事件分发都是通过发布者和订阅者之间的显式注册实现的.设计EventBus就是为了取代这种显示注册方式,使组件间有了更好的解耦.EventBus ...
- 正则regex
Regual expression 普通正常字符 字符匹配 . 表示任意字符 匹配次数 位置锚定 分组及引用