从 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 ...
随机推荐
- mysql控制台常用命令
登录: D:\seegot\mysql5.5.36\bin> mysql -uroot -proot Welcome to the MySQL monitor. Commands end wit ...
- kafka学习遗留问题
1.ZK在kafka中的作用 2.Kafka支持优先级队列么 未完待续
- mesos-master启动失败,报错Failed to load unknown flag 'quorum.rpmsave'
[现象] mesos启动失败,查看mesos状态报错: [root@hps102 ~]# systemctl status mesos-master ● mesos-master.service - ...
- KVM虚拟机高级设置——10 快照、克隆、替换磁盘
查看虚拟机磁盘文件 [root@CentOS2 ~]# cd /var/lib/libvirt/images/ [root@CentOS2 images]# ll -h total 13G -rw-r ...
- Centos7下安装Elasticsearch 5.6.6
环境 因为elasticsearch是用java编写的,所以需要先安装JDK ES 5,安装需要 JDK 8 以上ES 6.5,安装需要 JDK 11 以上ES 7.2.1,内置了 JDK 12 安装 ...
- 正则表达式匹配IP地址
'''首先分析ip地址的特征:255.255.255.255,前三位的数字处理基本一致 1位: 0-9 \d2位:10-99 [1-9]\d3位:100-19 ...
- Unknown initial character set index '255' received from server. Initial client character 解决方法
Unknown initial character set index '255' received from server. Initial client character set can be ...
- spring-AOP动态代理,以及aspectJ的xml配置或注解配置方法,各个拦截器的使用顺序
package com.itheima.aspect; public class MyAspect { public void check_Permissions(){ System.out.prin ...
- 深入了解jQuery之链式结构
本文是在阅读了Aaron艾伦的jQuery源码解析(地址:http://www.imooc.com/learn/172)后的个人体会以及笔记.在这里感谢艾伦老师深入浅出的讲解!! 1 什么是链式? 先 ...
- CSS3过渡动画&关键帧动画
一.过渡动画 过渡(transition)动画,就是从初始状态过渡到结束状态这个过程中所产生的动画. 所谓的状态就是指大小.位置.颜色.变形(transform)等等这些属性. Note:不是所有属性 ...