【问题标题】:How to convert a python project into an executable file with all additional scripts?如何将 python 项目转换为带有所有附加脚本的可执行文件?
【发布时间】:2020-09-27 00:41:30
【问题描述】:

我知道已经有很多关于此的问题被问到,但没有一个对我有真正的帮助。让我解释整个项目场景,以便更好地阐明我的问题。目录结构有点像下图:

项目目录布局

我需要将整个基于 GUI 的项目(主文件使用 Tkinter 模块创建 GUI)转换为我可以与他人共享的 main.exe,同时确保所有其他文件的工作方式与其工作方式完全相同现在当我通过命令提示符运行这个 main.py 时。当我将此命令与 pyinstaller 一起使用时 -

"pyinstaller --onefile --noconsole main.py"

它会创建 main.exe,在运行时显示“执行脚本失败”。请详细解释我应该怎么做才能实现我上面所说的。提前谢谢你。

【问题讨论】:

  • 您需要在 SPEC 文件中使用 Tree(...) 添加这些目录。见document

标签: python tkinter exe pyinstaller


【解决方案1】:

pyinstaller 使用一些肮脏的技巧将一堆文件压缩成一个

我建议使用 cx_Freeze 和 inno setup installer maker 来代替

pip install cx_Freeze 安装它并去here 进行inno 设置

然后将以下内容复制到与您的项目位于同一文件夹中的名为 setup.py 的文件中

from cx_Freeze import setup, Executable

setup(name = "YOUR APP NAME" ,
      version = "1.0.0" ,
      description = "DESCRIPTION" ,
      executables = [Executable("PYTHON FILE", base = "Win32GUI")]
)

最后运行python setup.py build

如果你想作为一个文件下载这个文件here

只需稍微编辑文件并使用inno编译器制作成安装程序

【讨论】:

  • 感谢您告诉我有关 cx_freeze 的信息。我确实花了一些时间来修复所有的错误并稍微理解它,但这是完全值得的。非常感谢您急需的帮助。 :D
  • 那个下载链接好像死了。请在此处提供代码,如果不是太长或更好的来源,例如您自己的要点。
  • 这里是inno setup on github
【解决方案2】:

假设我们的项目具有以下结构。

MyApp
  |-models
  |  |-login.kv
  |-data
  |  |-words.json
  |  |-audio.tar.gz
  |-fonts
  |  |-FredokaOne.ttf
  |-images
  |  |-gb.pngsound.png
  |  |-icon.ico
  |-main.py
  |-main.kv
  |-draw.py
  |-image.py

并且依赖于以下包:

- kivy
- kivymd
- ffpyplayer
- gtts
  1. 首先要安装cx_Freeze
pip install cx_Freeze
  1. 将以下内容复制到与您的项目位于同一文件夹中的名为 setup.py 的文件中。
# https://cx-freeze.readthedocs.io/en/latest/distutils.html

import sys
from cx_Freeze import setup, Executable

includes = []

# Include your files and folders
includefiles = ['models/','data/','fonts/','images/','main.kv','draw.py','image.py']

# Exclude unnecessary packages
excludes = ['cx_Freeze','pydoc_data','setuptools','distutils','tkinter']

# Dependencies are automatically detected, but some modules need help.
packages = ['kivy','kivymd', 'ffpyplayer','gtts']    

base = None
shortcutName = None
shortcutDir = None
if sys.platform == "win32":
    base = "Win32GUI"
    shortcutName='My App'
    shortcutDir="DesktopFolder"

setup(
    name = 'MyApp',
    version = '0.1',
    description = 'Sample python app',
    author = 'your name',
    author_email = '',
    options = {'build_exe': {
        'includes': includes,
        'excludes': excludes,
        'packages': packages,
        'include_files': includefiles}
        }, 
    executables = [Executable('main.py', 
    base = base, # "Console", base, # None
    icon='images/icon.ico', 
    shortcutName = shortcutName, 
    shortcutDir = shortcutDir)]
)
  1. 最后运行。
python setup.py build

此命令将创建一个名为build 的子目录,其中还有一个以字母exe. 开头并以distutils 使用的平台的典型标识符结尾的子目录。这允许构建多个平台而不会发生冲突。

在 Windows 上,您可以构建一个简单的安装程序,其中包含 cx_Freeze 为您的应用程序包含的所有文件,方法是运行以下安装脚本:

python setup.py bdist_msi

Cx_freeze 参考

【讨论】:

    猜你喜欢
    • 2013-10-26
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多