用Cx-Freeze编译python项目。

问题描述 投票:0回答:1

我想把我正在做的一个项目制作成可执行文件,在不同的电脑上测试,不需要安装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部分。它生成了一个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")])

我不知道如何把所有的包都放在 "include "部分,而且我在网上找不到任何比helloworld.py这样的简单文件更有用的东西,而且cxfreeze的github上的样本只显示了如何从一个目录导入文件。我必须把所有的东西都移到一个单独的包里,然后把所有的文件放在同一个 "include "里吗?还是说我可以为每个包设置一个include?任何帮助都是非常感激的。

编辑: 我在 ParrotSec 4.9 (Debian based) 上运行。

python build project cx-freeze
1个回答
0
投票

使用 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及以后的版本有 问题 如果是这样,强烈建议使用 cx_freeze 6.1 - 而不是复制 python dll。

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

© www.soinside.com 2019 - 2024. All rights reserved.