【问题标题】:How can I use py2exe with arcpy?如何将 py2exe 与 arcpy 一起使用?
【发布时间】:2013-06-11 04:42:25
【问题描述】:

我正在尝试使用 py2exe 将 python 脚本转换为独立的可执行文件。该脚本主要使用 arcpy 构建,带有 Tkinter GUI。

setup.py脚本如下:

from distutils.core import setup
import py2exe

script = r"pathtoscript.py"

options = {'py2exe':{
    "includes": ['arcpy', 'arcgisscripting'],
    "packages": ['arcpy', 'arcgisscripting'],
    "dll_excludes": ["mswsock.dll", "powrprof.dll"]
    }}

setup(windows=[script], options=options)

运行时,setup.py 按预期创建 .exe,但是当我尝试运行可执行文件时,出现以下错误:

Traceback (most recent call last):
  File "autolim.py", line 7, in <module>
  File "arcpy\__init__.pyc", line 21, in <module>
  File "arcpy\geoprocessing\__init__.pyc", line 14, in <module>
  File "arcpy\geoprocessing\_base.pyc", line 14, in <module>
  File "arcgisscripting.pyc", line 12, in <module>
  File "arcgisscripting.pyc", line 10, in __load
ImportError: DLL load failed: The specified module could not be found.

我使用 python 2.7 和 arcgis 10.1 - 如果我忘记了任何有用的信息,请随时询问。

谁能告诉我我需要做什么才能使可执行文件正常工作?

非常感谢!

【问题讨论】:

  • 您是否假设最终用户将安装 ArcGIS?这不是使用 Arcpy 所必需的吗?
  • 第二个 @jozzas 说,py2exe 不会将 arcpy 捆绑到一个包含销售的 exe 中。 arcpy 包在 arcgisscripting.pyd 之外有很多依赖
  • @jozzas,没错。最终用户肯定会安装 ArcGIS。据我所知,py2exe 已经捆绑了大多数依赖项,但错过了 arcgisscripting。

标签: python py2exe arcpy


【解决方案1】:

我遇到了同样的问题...

由于您的用户将在他们的计算机上安装 python/arcpy,因此您的 arcpy 脚本位于 data_files 目录中。

setup(windows=[script], data_files=[('scripts', glob(r'/path/to/scripts/*.py')], options=options)

然后使用subprocess.Popen给他们打电话

import subprocess
subprocess.Popen(r'python "%s\scripts\autolim.py"' % self.basedir)

Popen 是非阻塞的,因此它不会在 arcpy 脚本运行时冻结您的 GUI。

如果您想打印 arcpy 脚本中的任何打印语句,请更改为

p = subprocess.Popen(r'python "%s\scripts\autolim.py"' % self.basedir, stdout=subprocess.PIPE)

while True:
    line = p.stdout.readline()
    if not line:
        break
    sys.stdout.write(line)
    sys.stdout.flush()

【讨论】:

    【解决方案2】:

    建议你看这一步:https://community.esri.com/t5/python-questions/using-py2exe-with-arcpy-it-can-be-done-easily/td-p/360520

    您必须在设置选项中添加排除并复制站点包路径。 我试过了,效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 2014-01-26
      • 2023-03-27
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多