如何在arcpy中使用py2exe?

时间:2013-06-11 04:42:25

标签: python py2exe arcpy

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

任何人都可以告诉我需要做些什么来使可执行文件正常工作吗?

非常感谢!

1 个答案:

答案 0 :(得分: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()
相关问题