分发地理处理模块

按照以下分发 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/*'] 
                      }, 
          )

  2. 如果分发支持其他语言的地理处理模块,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
  3. 要构建 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 ProPython 包开发过程,可以构建并分发包以通过自定义工具箱来扩展地理处理,可在 ArcGIS 系统工具箱和 arcpy 中查看并执行这些自定义工具箱,还可以对地理处理模块进行国际化以支持多种语言。

相关主题