【Python】 —— pyinstaller 打包多个 py 文件为一个 exe

核心语句:

pyinstaller -F main.py -p py_dir

安装pyinstaller

pip install pyinstaller

 

详细描述:

test 目录下有三个 py 文件,分别为 cmmd.py、hello.py、test2/word.py,

依赖关系如下(A>B 表示 A 依赖于 B,或者说 A 中从 B 中 import 一些内容)

cmmd.py > hello.py > word.py

 

# cmmd.py
# -*- coding: utf-8 -*-
 
from time import sleep
 
from hello import show
 
 
def main():
    count = 1
 
    while count <= 5:
        show(count)
        sleep(1)
        count += 1
    print("Bye!")
    
 
if __name__ == "__main__":
    main()

 

# hello.py
# -*- coding: utf-8 -*-
 
from test2.word import what
 
 
def show(nbr):
    res = "[ No.{} | Test: {}.]".format(nbr, what())
    print(res)
# word.py
# -*- coding: utf-8 -*-
 
 
def what():
    return "Hello, Python"

 

通过依赖关系可以知道,cmmd.py 是主程序,即入口,

所以,在test目录下运行打包命令:

 

# -F 打包成一个 exe
# -p 相关的文件的路径,即所需的其他文件所在目录,
# 可以用路径分隔符指定多个路径,windows用分号';',linux用冒号':'
# 这里是在test目录下运行的命令,所以 -p 后边跟的是 相对路径 test2
# -p 前边写的是主入口程序的路径,这里写的相对路径 cmmd.py
pyinstaller -F cmmd.py -p test2

打包的过程的关键信息

可见,之前添加的 -p test2,被添加到了PYTHONPATH 中。

打包后的 exe 运行结果

The end.

 

 

 

### 使用PyInstaller将多文件Python项目打包单个EXE文件 当处理包含多个`.py`文件的复杂Python项目时,可以利用`PyInstaller`将其打包为单一的可执行文件。对于仅有一个入口脚本的情况,操作相对简单;但对于涉及多个模块或多层目录结构的应用,则需额外注意一些细节。 #### 安装PyInstaller 确保已安装最新版本的`PyInstaller`以便获得最佳兼容性和功能支持[^2]: ```bash pip install --upgrade pyinstaller ``` #### 准备工作 确认项目的主程序(即启动整个应用的那个脚本)路径,并了解哪些依赖项是必要的。如果存在外部资源如配置文件、图像等,在此阶段也应一并考虑其集方式。 #### 打包命令详解 为了创建独立于任何附加文件之外的完全自包容型应用程序,推荐采用如下指令来调用`PyInstaller`: ```bash pyinstaller -F main_script.py ``` 这里`main_script.py`代表的是项目的入口点——那个负责初始化所有组件并将它们连接起来的核心脚本名称。参数`-F`指示`PyInstaller`构建一个单独的可执行文件而不是默认的一组文件夹和文件集合[^1][^3]。 然而,针对更复杂的场景,可能还需要指定更多选项以满足特定需求。例如,通过添加隐藏导入(`--hidden-import`)解决某些库未能被自动检测的问题;或是借助钩子(hooks)机制来自定义收集过程中的行为调整。 另外,若希望生不含控制台窗口的GUI应用程序,可在上述基础上追加`-w`标志位[^4]: ```bash pyinstaller -F -w main_script.py ``` 这会告诉编译器忽略标准输入/输出流,从而使得最终产物更适合图形界面类别的软件分发。 #### 处理多模块项目 对于由众多相互关联的小部件构的大规模工程而言,除了正确设置好顶层驱动逻辑外,还需保证内部各部分之间的协作顺畅无阻。此时建议遵循以下几点原则: - **清晰化依赖关系**:让每一个辅助性的源码单元都能够在脱离整体环境的情况下顺利加载; - **优化隐含引用声明**:对于那些不会经由常规途径进入分析范围内的第三方扩展件或者其他形式的支持材料,务必显式告知工具链; - **测试先行开发模式**:每次修改完代码之后都要及时验证新产生的二进制制品能否稳定运作,以此快速定位潜在缺陷源头。 综上所述,虽然直接作用于单个纯文本描述符上的转换流程较为直观易懂,但是面对实际生产环境中更为错综复杂的业务形态时,还是应该充分考虑到各种可能出现的变化因素,进而采取更加稳健有效的策略来进行部署前的最后一道工序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值