将自定义 .py 文件打包成 .exe
Packing custom .py files into .exe
我做了一个小项目,其中包括将各种 python 文件导入另一个 python 文件。这是我的目录结构。
Main_Folder
|_ my_main_file.py
|_ Sites (a directory inside Main_Folder)
|_ __init__.py
|_ some_other.py
这基本上是我的目录结构。此 some_other.py
通过以下命令导入到我的 my_main_file.py
中:
from Sites import *
我正在导入该目录中的所有内容。所以,我想做的是将整个项目变成一个 独立的二进制文件 。我使用 pyintaller 将我的 .py
文件转换为 .exe
。但是,我只编写了将所有内容都放在 1 个文件中的脚本,这使得任务变得简单。但是,这一次,我想尝试一些新的东西。
我的 python 脚本接受命令行参数并且可以正常工作。如果没有命令行参数,python 脚本将无法运行。我可以转换为 exe,但即使我给出参数,该 exe 也什么都不做。
所以,我从 pyinstaller 得到了一个 .spec
文件,并修改它以获得我的 some_other.py
文件。 SPEC 文件如下所示:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['my_main_file.py'],
pathex=['C:\Users\User Name\Main_Folder'],
binaries=None,
datas=[('Sites/*.py','Sites')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='my_main_file',
debug=False,
strip=False,
upx=True,
console=True )
这会产生一个 .exe
,但那个 exe 不会 work.The exe 不会显示任何内容。但是,它的大小大约为 11 MB。有什么东西吗?
我试过 nuitka
,但是那个给出了一个关于无法找到 gendef.exe
的错误,我对安装 minGW 并不感兴趣。
顺便说一句,我在 64 位机器上,py2exe 的 bundle_file:1
对我不起作用。
我建议您使用 cx_Freeze
,这是我认为最好的 python 代码打包器。
安装
安装非常简单,只需下载并安装此 cx_Freeze installer (this one if you are on python 3.4) taken from the official PyPi package site。完成后,打开 cmd 和 运行 python cxfreeze-postinstall
py 与 cx_Freeze
一起执行
最快的方法是在项目的父目录上打开命令提示符,然后 运行ning cxfreeze <your .py script>
。这将创建一个 dist 文件夹,其中包含您的主程序及其导入的所有模块。
但是,如果您想更进一步并在使代码成为可执行文件时有更多的选择,您可以按照 here 的说明制作 setup.py
,然后 运行在 cmd python setup.py build
中。与前面的方法不同,这会创建一个名为 build
的目录,其中包含另一个目录,该目录具有您正在编译的平台的名称。现在,里面有可执行文件和库。
我做了一个小项目,其中包括将各种 python 文件导入另一个 python 文件。这是我的目录结构。
Main_Folder
|_ my_main_file.py
|_ Sites (a directory inside Main_Folder)
|_ __init__.py
|_ some_other.py
这基本上是我的目录结构。此 some_other.py
通过以下命令导入到我的 my_main_file.py
中:
from Sites import *
我正在导入该目录中的所有内容。所以,我想做的是将整个项目变成一个 独立的二进制文件 。我使用 pyintaller 将我的 .py
文件转换为 .exe
。但是,我只编写了将所有内容都放在 1 个文件中的脚本,这使得任务变得简单。但是,这一次,我想尝试一些新的东西。
我的 python 脚本接受命令行参数并且可以正常工作。如果没有命令行参数,python 脚本将无法运行。我可以转换为 exe,但即使我给出参数,该 exe 也什么都不做。
所以,我从 pyinstaller 得到了一个 .spec
文件,并修改它以获得我的 some_other.py
文件。 SPEC 文件如下所示:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['my_main_file.py'],
pathex=['C:\Users\User Name\Main_Folder'],
binaries=None,
datas=[('Sites/*.py','Sites')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='my_main_file',
debug=False,
strip=False,
upx=True,
console=True )
这会产生一个 .exe
,但那个 exe 不会 work.The exe 不会显示任何内容。但是,它的大小大约为 11 MB。有什么东西吗?
我试过 nuitka
,但是那个给出了一个关于无法找到 gendef.exe
的错误,我对安装 minGW 并不感兴趣。
顺便说一句,我在 64 位机器上,py2exe 的 bundle_file:1
对我不起作用。
我建议您使用 cx_Freeze
,这是我认为最好的 python 代码打包器。
安装
安装非常简单,只需下载并安装此 cx_Freeze installer (this one if you are on python 3.4) taken from the official PyPi package site。完成后,打开 cmd 和 运行 python cxfreeze-postinstall
py 与 cx_Freeze
一起执行最快的方法是在项目的父目录上打开命令提示符,然后 运行ning cxfreeze <your .py script>
。这将创建一个 dist 文件夹,其中包含您的主程序及其导入的所有模块。
但是,如果您想更进一步并在使代码成为可执行文件时有更多的选择,您可以按照 here 的说明制作 setup.py
,然后 运行在 cmd python setup.py build
中。与前面的方法不同,这会创建一个名为 build
的目录,其中包含另一个目录,该目录具有您正在编译的平台的名称。现在,里面有可执行文件和库。