我正在尝试使用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 - 随时问我是否忘记了任何有用的信息。
任何人都可以告诉我需要做些什么来使可执行文件正常工作吗?
非常感谢!
答案 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()