为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 cx_Freeze 在运行 exe 文件时会出现此错误?

为什么 cx_Freeze 在运行 exe 文件时会出现此错误?

暮色呼如 2021-11-02 16:59:15
我是 cx_Freeze 的新用户,我想用所有需要的依赖项打包我的 python 文件。我使用Python3。我在具有依赖项的 python virtualenv 下工作,例如 tensorflow, sklearn, matplotlib, python-vlc...以下是在 Windows 上重现相同错误所需的所有文件。我要安装的requirements.txtabsl-py==0.7.0altgraph==0.16.1astor==0.7.1audioread==2.1.6certifi==2018.11.29chardet==3.0.4cx-Freeze==5.1.1cycler==0.10.0decorator==4.3.2distlib==0.2.8future==0.17.1gast==0.2.2grpcio==1.18.0h5py==2.9.0idna==2.8Jinja2==2.10joblib==0.13.1Keras-Applications==1.0.7Keras-Preprocessing==1.0.9kiwisolver==1.0.1librosa==0.6.2llvmlite==0.27.0macholib==1.11Markdown==3.0.1MarkupSafe==1.1.0matplotlib==3.0.2numba==0.42.0numpy==1.16.1pefile==2018.8.8protobuf==3.6.1py2exe==0.9.2.2PyInstaller==3.4pynsist==2.3pyparsing==2.3.1pypiwin32==223pysrt==1.1.1python-dateutil==2.8.0python-vlc==3.0.4106pywin32==224pywin32-ctypes==0.2.0requests==2.21.0requests-download==0.1.2resampy==0.2.1scikit-learn==0.20.2scipy==1.2.0six==1.12.0sklearn==0.0tensorboard==1.12.2tensorflow==1.12.0termcolor==1.1.0tornado==5.1.1urllib3==1.24.1watson-developer-cloud==2.8.0websocket-client==0.48.0Werkzeug==0.14.1yarg==0.1.9我有一个主要的 python 文件IHM.py,它从另外两个 python 文件sync.py和neurnet.py.
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

我在cx_Freeze5.1.1的安装脚本中看到以下潜在问题:

  1. 您正在使用numpy(并且matplotlib取决于numpy)。为了cx_Freeze正确冻结numpy,需要将其添加到选项packages列表中build_exe

  2. 对于cx_Freeze5.1.1 版,TCL/TK DLL 需要包含在lib构建目录的子目录中。您可以通过将元组传递给列表选项(source, destination)的相应条目来实现include_files。此外,动态查找 TCL/TK DLL 的位置会更安全。

总之,尝试在您的安装脚本中进行以下修改:

PYTHON_INSTALL_DIR = os.path.dirname(sys.executable)

os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')

os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')


buildOptions = dict(

    packages = ["numpy"],

    excludes = [],

    includes = ["idna.idnadata"],

    include_files=[(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),

                    os.path.join('lib', 'tk86t.dll')),

                   (os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),

                    os.path.join('lib', 'tcl86t.dll'))]

)

如果此修改仍然不起作用,请从最小的tkinter应用程序开始,例如通过注释掉所有导入,但tkinter在您发布的示例应用程序中并使其在您的系统上运行。然后一个接一个地重新添加您需要的模块 ( numpy, matplotlib, ...) 并检查未冻结和冻结的应用程序是否在每一步都正常工作。例如,您可以向示例应用程序添加一个消息框,并在那里打印您导入的每个模块的版本。


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号