分发地理处理模块
按照以下分发 Python 包的标准模式,分发和安装自定义地理处理模块。
本主题继续介绍创建地理处理模块主题中的 foo 模块示例。
将地理处理模块分发为压缩存档
要将地理处理模块分发为压缩存档,请将模块(例如 foo 包)存档为 .zip 文件或其他首选压缩格式。 然后,为您的受众提供以下步骤:
克隆默认的 ArcGIS Pro conda 环境。
注:
不建议修改默认 ArcGIS Pro Python 环境 (
arcgispro-py3),可能会带来意料之外的后果。 建议只修改克隆的环境。将
foo包解压缩到克隆的 site-packages 文件夹 (%LocalAppData%\ESRI\conda\envs\<clone_environment_name>\Lib\site-packages)。使用 Python 包管理器将当前 ArcGIS Pro conda 环境切换到克隆环境。
通过 pip 分发地理处理模块
可以使用 setuptools 库通过包含 wheel 文件的 pip 分发地理处理模块。
注:
要通过 pip 分发模块,您的 Python 环境中必须具有 conda、pip、setuptools 和 wheel 包。 这些包包含在默认 ArcGIS Pro Python 环境中。
创建用于分发的 wheel 文件
foo 包需要一个分发包,以便安装到 Python 站点包目录中。 具有分发包后,该包可以与其他用户共享或供其使用。
要创建 wheel 文件,请完成以下步骤:
- 创建与以下脚本类似的
setup.py脚本:
setup.py
用于创建 setup.py 脚本的示例代码。
import os
from setuptools import setup
def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()
setup(name='foo',
version='1.0',
author='Esri',
description=("Example for extending geoprocessing through Python modules"),
long_description=read('Readme.txt'),
python_requires='~=3.3',
packages=['foo'],
package_data={'foo':['esri/toolboxes/*',
'esri/arcpy/*', 'esri/help/gp/*',
'esri/help/gp/toolboxes/*', 'esri/help/gp/messages/*']
},
)
- 如果分发支持其他语言的地理处理模块,
setup函数的package_data参数必须包括其他语言目录。 例如,如果要包含西班牙语本地化,则setup.py应为如下所示:
要进行西班牙语本地化的 setup.py
用于加入西班牙语本地化目录的 setup.py 示例代码:
import os
from setuptools import setup
def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()
setup(name='foo',
version='1.0',
author='Esri',
description=("Example for extending geoprocessing through Python modules"),
long_description=read('Readme.txt'),
python_requires='~=3.3',
packages=['foo'],
package_data={'foo':['esri/toolboxes/*',
'esri/arcpy/*', 'esri/help/gp/*',
'esri/help/gp/toolboxes/*', 'esri/help/gp/messages/*',
'esri/help/es/gp/*', 'esri/help/es/gp/toolboxes/*',
'esri/help/es/gp/messages/*']
},
)
setup.py 生成脚本将设置多个属性,并将生成实用工具定向到包目录。 详细描述存储在随附的 Readme.txt 文件中。 setup.py 和 Readme.txt 文件应位于 src 目录中。 有关使用 setup() 的详细信息,请参阅打包和分发工程。 foo 包的目录结构如下(如果仅支持英语,则排除附加的 es 西班牙语文件夹):
Src
├ setup.py
├ Readme.txt
└──foo
├ __init__.py
├ bar.py
└──esri
├──arcpy
│ └ SamplePythonToolbox.py
├──help
│ ├──es
│ │ └──gp
│ │ ├ SamplePythonToolbox_toolbox.xml
│ │ ├ SampleTool_SamplePythonToolbox.xml
│ │ ├──messages
│ │ │ └ messages.xml
│ │ └──toolboxes
│ │ └ SamplePythonToolbox.xml
│ └──gp
│ ├ SamplePythonToolbox_toolbox.xml
│ ├ SampleTool_SamplePythonToolbox.xml
│ ├──messages
│ │ └ messages.xml
│ └──toolboxes
│ └ SamplePythonToolbox.xml
└──toolboxes
├ SamplePythonToolbox.pyt
├ SamplePythonToolbox.pyt.xml
└ SamplePythonToolbox.SampleTool.pyt.xml
要构建
foo包的安装程序,请使用命令提示符在src目录运行以下命令:python setup.py sdist bdist_wheelsdist bdist_wheel命令将在src父目录中创建dist、build和foo.egg-info文件夹。 在dist文件夹中,将创建一个名为foo-1.0-py3-none-any.whl的 wheel 文件。 可以直接通过 pip 来分发 wheel 文件。
使用 pip 从 wheel 文件进行安装
克隆并切换环境后,请打开 Python 命令提示符以直接使用 pip 安装 wheel 文件。 Pip 会将 wheel 文件安装到活动环境中。
在
src\dist目录中从 Python 命令提示符运行以下命令:pip install foo-1.0-py3-none-any.whl安装
foo包时,会在site-packages目录中创建以下目录结构(如果仅支持英语,则排除附加的es西班牙语文件夹):site-packages └──foo ├ __init__.py ├ bar.py └──esri ├──arcpy │ └ SamplePythonToolbox.py ├──help │ ├──es │ │ └──gp │ │ ├ SamplePythonToolbox_toolbox.xml │ │ ├ SampleTool_SamplePythonToolbox.xml │ │ ├──messages │ │ │ └ messages.xml │ │ └──toolboxes │ │ └ SamplePythonToolbox.xml │ └──gp │ ├ SamplePythonToolbox_toolbox.xml │ ├ SampleTool_SamplePythonToolbox.xml │ ├──messages │ └──toolboxes │ └ SamplePythonToolbox.xml └──toolboxes ├ SamplePythonToolbox.pyt ├ SamplePythonToolbox.pyt.xml └ SamplePythonToolbox.SampleTool.pyt.xml注:
仅当包中包含消息文件时,
messages文件夹才会存在。如果您的计算机具有禁止运行安装的限制,那么将
foo目录从build\lib目录复制到%LocalAppData%\ESRI\conda\envs\<environment_name>\Lib\site-packages文件夹与通过已存档文件进行安装所获得的效果相同。 手动复制包时,pip不会对包进行识别和管理。
使用地理处理模块
在 ArcGIS Pro 中,可以从地理处理窗格访问 SamplePythonToolbox 工具,也可以进行搜索。 也可以从 arcpy 访问工具箱和工具,如下所示:arcpy.SamplePythonToolbox.SampleTool()
借助 ArcGIS Pro 和 Python 包开发过程,可以构建并分发包以通过自定义工具箱来扩展地理处理,可在 ArcGIS 系统工具箱和 arcpy 中查看并运行这些自定义工具箱,还可以对地理处理模块进行国际化以支持多种语言。