Skip to main content

分发地理处理模块

按照以下分发 Python 包的标准模式,分发和安装自定义地理处理模块。

本主题继续介绍创建地理处理模块主题中的 foo 模块示例。

将地理处理模块分发为压缩存档

要将地理处理模块分发为压缩存档,请将模块(例如 foo 包)存档为 .zip 文件或其他首选压缩格式。 然后,为您的受众提供以下步骤:

  1. 克隆默认的 ArcGIS Pro conda 环境。

    注:

    不建议修改默认 ArcGIS Pro Python 环境 (arcgispro-py3),可能会带来意料之外的后果。 建议只修改克隆的环境。

  2. foo 包解压缩到克隆的 site-packages 文件夹 (%LocalAppData%\ESRI\conda\envs\<clone_environment_name>\Lib\site-packages)。

  3. 使用 Python 包管理器将当前 ArcGIS Pro conda 环境切换到克隆环境。

通过 pip 分发地理处理模块

可以使用 setuptools 库通过包含 wheel 文件的 pip 分发地理处理模块。

注:

要通过 pip 分发模块,您的 Python 环境中必须具有 condapipsetuptoolswheel 包。 这些包包含在默认 ArcGIS Pro Python 环境中。

创建用于分发的 wheel 文件

foo 包需要一个分发包,以便安装到 Python 站点包目录中。 具有分发包后,该包可以与其他用户共享或供其使用。

要创建 wheel 文件,请完成以下步骤:

  1. 创建与以下脚本类似的 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/*']
                  },
      )
  1. 如果分发支持其他语言的地理处理模块,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.pyReadme.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
  1. 要构建 foo 包的安装程序,请使用命令提示符在 src 目录运行以下命令:

    python setup.py sdist bdist_wheel

    sdist bdist_wheel 命令将在 src 父目录中创建 distbuildfoo.egg-info 文件夹。 在 dist 文件夹中,将创建一个名为 foo-1.0-py3-none-any.whl 的 wheel 文件。 可以直接通过 pip 来分发 wheel 文件。

使用 pip 从 wheel 文件进行安装

克隆并切换环境后,请打开 Python 命令提示符以直接使用 pip 安装 wheel 文件。 Pip 会将 wheel 文件安装到活动环境中。

  1. 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 文件夹才会存在。

  2. 如果您的计算机具有禁止运行安装的限制,那么将 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 中查看并运行这些自定义工具箱,还可以对地理处理模块进行国际化以支持多种语言。