无法将使用python-docx的.py脚本转换为.exe

时间:2018-03-03 16:49:45

标签: python exe pyinstaller docx cx-freeze

我使用Python 3.6编写了一个脚本,用户通过tkinter GUI输入数据,然后将其与一些额外的文本一起打印到WORD文档中。

所有在我的Wing IDE中工作正常但是一旦将其转换为.exe,当我使用py2exe / cx_Freeze或者只是打开并立即关闭窗口时它会显示错误我将其转换为pyinstaller

当我尝试转换包含标准库和tkinter的脚本时,它完全正常。但是一旦我加入docx,它就不会因某种原因而工作。我现在知道Pyinstaller不想使用docx。我还有其他方法可以将包含docx的脚本转换为.exe吗?

另外,我对编程很新。提前谢谢。

这是一个简短的例子:

from tkinter import *
from docx import Document
from docx.shared import Inches

document = Document('CRS-example.docx')

def Generate(event):
    document.add_paragraph('Hello World')
    document.save('TESTING.docx')

root = Tk()

frame = Frame(root)
frame.pack()
generate = Button(frame, text = 'Generate')
generate.bind('<Button-1>', Generate)
generate.pack()

root.mainloop()

最重要的是,cx_Freeze给了我这样的错误列表:

Traceback (most recent call last):
  File "setupcx.py", line 18, in <module>
    executables = [Executable("tkinter_test.py", base = base)])
  File "C:\Development\Python\lib\site-packages\cx_Freeze\dist.py", line 349, in setup
    distutils.core.setup(**attrs)
  File "C:\Development\Python\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
  File "C:\Development\Python\lib\distutils\dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "C:\Development\Python\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Development\Python\lib\distutils\command\build.py", line 135, in run
    self.run_command(cmd_name)
  File "C:\Development\Python\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "C:\Development\Python\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Development\Python\lib\site-packages\cx_Freeze\dist.py", line 219, in run
    freezer.Freeze()
  File "C:\Development\Python\lib\site-packages\cx_Freeze\freezer.py", line 616, in Freeze
    self.finder = self._GetModuleFinder()
  File "C:\Development\Python\lib\site-packages\cx_Freeze\freezer.py", line 340, in _GetModuleFinder
    finder.IncludeModule(name)
  File "C:\Development\Python\lib\site-packages\cx_Freeze\finder.py", line 651, in IncludeModule
    namespace = namespace)
  File "C:\Development\Python\lib\site-packages\cx_Freeze\finder.py", line 311, in _ImportModule
    deferredImports, namespace = namespace)
  File "C:\Development\Python\lib\site-packages\cx_Freeze\finder.py", line 404, in _InternalImportModule
    parentModule, namespace)
  File "C:\Development\Python\lib\site-packages\cx_Freeze\finder.py", line 417, in _LoadModule
    namespace)
  File "C:\Development\Python\lib\site-packages\cx_Freeze\finder.py", line 486, in _LoadPackage
    self._LoadModule(name, fp, path, info, deferredImports, parent)
  File "C:\Development\Python\lib\site-packages\cx_Freeze\finder.py", line 464, in _LoadModule
    self._RunHook("load", module.name, module)
  File "C:\Development\Python\lib\site-packages\cx_Freeze\finder.py", line 537, in _RunHook
    method(self, *args)
  File "C:\Development\Python\lib\site-packages\cx_Freeze\hooks.py", line 615, in load_tkinter
    tclSourceDir = os.environ["TCL_LIBRARY"]
  File "C:\Development\Python\lib\os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'TCL_LIBRARY'

这也是我的cx_Freeze setup.py,其中我遇到了错误:

import sys
from cx_Freeze import setup, Executable

build_exe_options = {"includes": ["tkinter"]}

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(
    name = "simple_Tkinter",
    version = "0.1",
    description = "Sample cx_Freeze Tkinter script",
    options = {"build_exe": build_exe_options},
    executables = [Executable("tkinter_test.py", base = base)])

0 个答案:

没有答案