2

我正在尝试使用 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 - 随时询问我是否忘记了任何有用的信息。

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

非常感谢!

4

2 回答 2

0

我有同样的问题...

由于您的用户将在他们的计算机上安装 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()
于 2014-11-27T01:36:07.923 回答
0

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

您必须在设置选项中添加排除并复制站点包路径。我已经尝试过了,它有效。

于 2021-01-15T04:00:09.770 回答