按照以下分发 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_wheel
sdist 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 中查看并执行这些自定义工具箱,还可以对地理处理模块进行国际化以支持多种语言。