【问题标题】:Compiling python project with Cx-Freeze使用 Cx-Freeze 编译 python 项目
【发布时间】:2020-10-03 23:13:25
【问题描述】:

我正在尝试从我正在处理的项目中制作和执行,以便在另一台计算机上对其进行测试,而无需安装 python。

我想使用 cx freeze 来构建和 exe 文件,这是我的项目树:

- Project
   - objects
         blocks.py
         enemy.py
         item.py
         player.py
         __init__.py
   - scripts
         camera.py
         chunk_manager.py
         __init__.py
   - textures
       - items
       - player
       - terrain
       - UI
       - void
         index.py
         __init__.py
     main.py
     settings.py
     setup.py
     map.json

你可能会说,这是一个游戏。

无论如何,我所做的只是执行cxfreeze main.py --target-dir=./ dist,它生成了一个包含很多东西的构建目录。 它生成了一个 linux 可执行文件,但没关系,我想测试是否可以先使其独立于 python,稍后我将解决 .exe 部分。

所以,我执行了文件,但什么也没发生。然后我尝试从终端运行,它说它缺少 camera.py 文件。我进入生成的目录,发现 cxfreeze 没有复制该文件。我试着自己搬进去,但没有用。

我开始检查其他文件,发现只有纹理被复制了。 我认为这只是因为我使用了一行命令,所以我现在正在尝试制作一个 setup.py 文件(如您在文件树中所见),但我迷失了如何导入我的自定义包(对象,脚本和纹理)以及与 main.py 位于同一目录中的文件

这就是我的 setup.py 文件的样子:

import sys
from cx_Freeze import setup, Executable


options = {
    'build_exe': {
        'includes': ['camera', 'chunk_manager'], 'path': sys.path + ['scripts']
    }
}

setup(
    name = "Void Boats",
    version = "alpha0.1",
    options = options,
    executables = [Executable("main.py")])

我不确定如何将所有包放在“包含”部分中,而且我在互联网上找不到任何只使用 helloworld.py 之类的简单文件以及它们的 cxfreeze 示例的东西github 仅显示如何从一个目录导入文件。我是否必须将所有内容移动到一个包中并将所有文件放在同一个“包含”中?或者我可以为我拥有的每个包裹提供一个包含吗?任何帮助将不胜感激。

编辑:我在 ParrotSec 4.9(基于 Debian)上运行

【问题讨论】:

标签: python build project cx-freeze


【解决方案1】:

在 cmd 上使用“python -m setup.py build”,将构建 exe。

带有额外文件夹的示例设置:

from cx_Freeze import setup, Executable
import sys

version = "0.0.6"

build_options = {
    "packages": [],
    "excludes": [],
    "build_exe": "X:\\builds\\",
    "include_files": ["Sequence_Sample/", "icons/"],
}

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

executables = [Executable("MainUIController.py", base=base, targetName="pym")]

setup(
    name="Python Image Macro Project",
    version=version,
    description="Image Based macro project.",
    options={"build_exe": build_options},
    executables=executables,
)

Python 3.8 及更高版本具有 problem 和 cx_freeze 6.1 - 不复制 python dll。 如果是这种情况,强烈建议使用 cx_freeze 6.2。

您必须克隆 cx_freeze 并构建它,然后安装它以使用 6.2。

【讨论】:

    猜你喜欢
    • 2014-09-26
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2017-01-05
    • 1970-01-01
    • 2018-05-19
    相关资源
    最近更新 更多