使用 Cx-Freeze 编译 python 项目
Compiling python project with Cx-Freeze
我正在尝试从我正在处理的项目中制作和执行,以便在不同的计算机上测试它,而不需要安装 python。
我想使用 cx freeze 来构建和执行文件,这是我的项目树:
- 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")])
我不确定如何将所有包放入 'include' 部分,而且我在互联网上找不到任何使用超过 helloworld.py 等简单文件的东西,并且github 上的 cxfreeze 样本只展示了如何从一个目录导入文件。我是否必须将所有内容都移动到一个包中并将所有文件放在同一个 'include' 中?或者我可以为我拥有的每个包裹都包含一个吗?非常感谢任何帮助。
编辑:我 运行 使用 ParrotSec 4.9(基于 Debian)
在 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。
我正在尝试从我正在处理的项目中制作和执行,以便在不同的计算机上测试它,而不需要安装 python。
我想使用 cx freeze 来构建和执行文件,这是我的项目树:
- 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")])
我不确定如何将所有包放入 'include' 部分,而且我在互联网上找不到任何使用超过 helloworld.py 等简单文件的东西,并且github 上的 cxfreeze 样本只展示了如何从一个目录导入文件。我是否必须将所有内容都移动到一个包中并将所有文件放在同一个 'include' 中?或者我可以为我拥有的每个包裹都包含一个吗?非常感谢任何帮助。
编辑:我 运行 使用 ParrotSec 4.9(基于 Debian)
在 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。