ArcGIS Server 提供了针对命令行 ArcPy 脚本使用 Python 3 运行时的选项。选择工具可以通过 ArcGIS Server 单独安装的 Python 3.x 运行时来执行。
旧版本:
在 Linux 上早期版本的 ArcGIS Server 中,Python 脚本仅可以使用 ArcGIS Server 随附的 Python 2.7 运行时在 Linux shell 中执行。在涉及第三方库和使用路径时,这种体验有局限性。
入门
对于 Linux 操作系统来说,您可以通过使用 conda 下载和安装 arcgis-server-py3 软件包来开始使用 ArcGIS Server 上的 Python 3 运行时。
Python 具有一套丰富的预先存在代码包生态系统,ArcGIS 可对此加以利用,但是管理在系统上安装哪些软件包却是一项复杂费时的任务,特别是在使用多个工程或者尝试与他人共享代码时尤为如此。
为了利用此多功能性,Python 社区已设计了多种方法在多个 Python 版本中创建工程,并简化安装几乎所有公用 Python 软件包的过程。Conda 是最常用且应用最广泛的 Python 软件包管理程序。将 conda 与 ArcGIS Server 进行集成可方便使用开源 Python 生态系统中的功能和 ArcGIS Server 中的第三方软件包。可以快速安装、运行和更新 Python 代码中使用的软件包及其依赖项。
如果您还没有 conda,则可从 Anaconda 网站进行下载。
若要访问 ArcGIS Python 功能,包括 ArcPy,可以通过 conda 直接安装 arcgis-server-py3 软件包。在 conda 环境中,请使用以下命令:
conda install -c esri arcgis-server-py3=<version>
<version> 值将指示库的当前版本,该版本与您的 ArcGIS Server 当前版本相同,格式为 n.n.n。例如,对于 ArcGIS Server 10.8:
conda install -c esri arcgis-server-py3=10.8.0
安装 arcgis-server-py3 软件包会添加 ArcPy,其中包括受支持的地理处理工具和所有第三方要求。
迁移
与 ArcGIS Server 结合使用 Python 3 运行时的方式与 ArcGIS Server 以及包括 ArcGIS Desktop 在内的其他产品结合使用 Python 2 的方式不同。要适应两个主要差异:Python 从 2 到 3 的变更以及 arcpy 中的差异。
对 ArcPy 中的功能所做的更改
对于 ArcGIS Server,许多地理处理工具将继续在 Python 3 运行时中可用,然而,有一些将无法使用。不包含 Parcel Fabric、Schematics 以及 Tracking Analyst 工具箱中所含的工具。其他工具箱中的其他工具也不可用。有关受支持地理处理工具的完整列表,请参阅 arcgis-server-py3 软件包中的 readme 文件。
arcpy.mapping 模块已被移除,并且已经在 ArcGIS Pro 中替换为 arcpy.mp 模块。arcpy.na 模块同样包含更改,多个更改与从 arcpy.mapping 到 arcpy.mp 的更改相关联。
Python 版本变更
ArcGIS Server Python 运行时使用 Python 3。这是源自其他 ArcGIS 产品的重大变动,这些产品已在 Python 2 产品线中应用并继续应用各版本。Python 3 产品线版本与 Python 2 产品线不兼容。虽然在本质上很多语言是相同的,但很多重要的详细信息已发生较大变化,包括字符串与字典的工作方式以及标准库的组织方式。
我们使用了几年的时间积极开发 Python 3,随着 Python 社区的移植,Python 3 与 Python 2 同时存在。此时,已经在 Python 3 中移植了大部分重要的第三方库,并且在 Python 在线社区中,达成了这样的共识,即所有新的开发工程都将在 Python 3 中完成。
重要的决策点在于您是否将更新 Python 代码以同时用在 Python 2 和 3 中。如果您正在对代码执行从 Python 2 到 Python 3 的单向转换,可以使用 2to3 命令行实用程序自动执行大部分的过程。该实用程序对于 Python 2 和 3 均可用。要特别注意的是,2to3 虽然是极佳的工具,但是它并不是完整的解决方案(有时估计为 95% 有效的解决方案),并且可能有必要对其进行其他更改。
关于移植到 Python 3 和迁移策略,可参考 http://python3porting.com/ 网站上 Lennart Regebro 的移植到 Python 3。编写能够在 Python 2 和 Python 3 中运行的脚本是有可能的。
请记住,更简单的 Python 脚本可能不需要任何更改,也可以正常运行。