python - 无法使py2exe工作

标签 python python-3.x py2exe

多年来,我一直在尝试将python应用程序打包为独立的可执行文件。我一直在尝试使用py2exe,但它似乎从未起作用。

可以说我们有机器A和机器B,我在机器A上构建程序,并尝试以可执行文件在机器B上运行。在尝试在机器B上运行的前几次尝试中,它会显示FATAL ERROR: Cannot load python library,但我认为是py2exe进程说1 missing module已满:

  1 missing Modules
  ------------------
? readline                            imported from cmd, code, pdb
Building 'dist\workinghoursGUI.exe'.
Building shared code archive 'dist\library.zip'.
Copy c:\python34\python34.dll to dist
Copy C:\Python34\DLLs\select.pyd to dist\select.pyd
Copy C:\Python34\DLLs\_lzma.pyd to dist\_lzma.pyd
Copy C:\Python34\DLLs\_socket.pyd to dist\_socket.pyd
Copy C:\Python34\DLLs\unicodedata.pyd to dist\unicodedata.pyd
Copy C:\Python34\DLLs\_bz2.pyd to dist\_bz2.pyd
Copy C:\Python34\DLLs\pyexpat.pyd to dist\pyexpat.pyd
Copy C:\Python34\DLLs\_hashlib.pyd to dist\_hashlib.pyd
Copy C:\Python34\DLLs\_ssl.pyd to dist\_ssl.pyd
Copy C:\Python34\DLLs\_ctypes.pyd to dist\_ctypes.pyd
Copy C:\Python34\DLLs\_tkinter.pyd to dist\_tkinter.pyd
Copy DLL C:\Python34\MSVCR100.dll to dist\
Copy DLL C:\Python34\DLLs\tk86t.dll to dist\
Copy DLL C:\Python34\DLLs\tcl86t.dll to dist\


然后我看到了这个问题Py2Exe "Missing Modules",发现我需要安装pyreadline,所以我做到了,然后py2exe进程没有返回任何缺少的模块,如下所示:

Building 'dist\workinghoursGUI.exe'.
Building shared code archive 'dist\library.zip'.
Copy c:\python34\python34.dll to dist
Copy C:\Python34\lib\site-packages\win32\_win32sysloader.pyd to dist\_win32sysloader.pyd
Copy C:\Python34\DLLs\_ssl.pyd to dist\_ssl.pyd
Copy C:\Python34\DLLs\select.pyd to dist\select.pyd
Copy C:\Python34\DLLs\_socket.pyd to dist\_socket.pyd
Copy C:\Python34\DLLs\_bz2.pyd to dist\_bz2.pyd
Copy C:\Python34\DLLs\_lzma.pyd to dist\_lzma.pyd
Copy C:\Python34\DLLs\pyexpat.pyd to dist\pyexpat.pyd
Copy C:\Python34\DLLs\_tkinter.pyd to dist\_tkinter.pyd
Copy C:\Python34\DLLs\unicodedata.pyd to dist\unicodedata.pyd
Copy C:\Python34\lib\site-packages\win32\win32api.pyd to dist\win32api.pyd
Copy C:\Python34\DLLs\_hashlib.pyd to dist\_hashlib.pyd
Copy C:\Python34\lib\site-packages\win32\win32evtlog.pyd to dist\win32evtlog.pyd
Copy C:\Python34\DLLs\_ctypes.pyd to dist\_ctypes.pyd
Copy DLL C:\Python34\DLLs\tcl86t.dll to dist\
Copy DLL C:\Python34\MSVCR100.dll to dist\
Copy DLL C:\Python34\DLLs\tk86t.dll to dist\
Copy ExtensionDLL C:\Python34\pywintypes34.dll to dist\


但是现在在机器B上,当运行.exe时,将显示一个仅输出port>的窗口,而应用程序在机器A上运行良好

这是我的安装文件:

from distutils.core import setup
import py2exe,sys,os

setup(console=['workinghoursGUI.py'])


和我程序中的导入全部在python的标准版本中:

from tkinter import *
from tkinter import ttk
import tkinter as tk
import tkinter.messagebox as tkm
import datetime,os,time


我可能做的事情显然是错误的,但是我无法解决问题,有人知道我可以解决这个问题吗,还是我不得不放弃?

dist文件夹如下所示:

dist folder

最佳答案

我终于有了这个问题,使用这个问题py2exe - generate single executable file

我发现我不得不修改我的安装文件,现在看起来像这样:

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')
#bundle files set to 2 because its a tkinter app
setup(
    options = {'py2exe': {'bundle_files': 2, 'compressed': True}},
    windows = [{'script': "workinghoursGUI.pyw"}],
    zipfile = None,
)


但是因为在我的代码中我使用的是os.path.dirname(os.path.realpath(__file__))py2exe不支持__file__,所以我发现自己在这个问题How do I get the path of the current executed file in Python?上,并使用ArtOfWarfare的答案来获取当前路径,即:

from inspect import getsourcefile
from os.path import abspath
...
abspath(getsourcefile(lambda:0))

关于python - 无法使py2exe工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42395538/

相关文章:

python - 如何检查给定变量是否存在于 jinja2 模板中?

python - 如何根据另一个数据框的条件删除数据框中的列,Python3

导入模块的Python测试和模拟

python - 在可能的情况下,将字符串转换为所有 pandas 列中的 float

python - 覆盖 setup.cfg 选项以实现默认行为

Python Pickle 模块和 OOP

Python:如何在对象列表上链接方法?

python - 在 Pandas 中组合单独的每日 CSV

python - scapy 的最终 EXE 文件是否需要另一个依赖文件

python - py2exe 创建的 exe 给出错误