pyinstaller将python代码打包成exe可执行文件

学校提供Windows Server 2008R2的远程服务器,不能联网,安装python第一步直接fail……

换了python的版本也不行,试了半天,改用他法,就是这里的exe打包执行。

目录

1.新建虚拟环境

2.完成代码,生成项目依赖库

3.安装 pyinstaller 

4.打包指令

5.路径设置问题

6.自动导入模块问题

7.其他问题

参考:01 exe文件打包_哔哩哔哩_bilibili

1.新建虚拟环境

使用pycharm新建虚拟环境下的工程,我的在 D:\code\pythonlearnVir,当前目录下文件如下:

(savefile文件夹是个人加的,忽略。)

2.完成代码,生成项目依赖库

主文件名为main.py,查看项目依赖项,在Terminal中执行:

pip freeze > requirements.txt

3.安装 pyinstaller 

在Terminal中执行:

pip install pyinstaller

成功后看一下:在Terminal中执行pyinstaller,会显示支持的语法:

4.打包指令

 pyinstaller -D main.py,更多方法:

  pyinstaller -D main.py  # 打包成多个文件
# pyinstaller -F main.py  # 打包成单个文件
# pyinstaller -F main.py -n newNameStr
# pyinstaller -D main.py -n newNameStr

成功后多出三个文件,其中:

    (1)build是编译过程文件,可以删除;

    (2)dist是编译完后文件,有用。包含exe可执行文件即main.exe,双击打开或通过终端打开;

    (3)xxxx.spec是相关配置文件。

注意,双击打开exe可执行文件,如果程序有错则不显示而直接退出;可以选用通过终端打开方式,在cmd中,输入文件路径后打开,可提示可能的错误。

5.路径设置问题

代码中涉及到本地文件读写,我要用到该路径下文件: 

D:\code\pythonlearnVir\savefile.demo.txt

给个例子,请这样写:

import os
import sys

flag=2  # 1: #针对单文件打包使用,2: # 针对多文件打包使用
if flag == 2:
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))  
else:
    BASE_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))  # 待验
print(BASE_DIR)


with open(os.path.join(BASE_DIR,"savefile\demo.txt"),mode='r',encoding='utf-8') as f:
    data=f.read().strip()
print(data)

6.自动导入模块问题

涉及到导入模块/函数/类,pyinstaller会自动打包所导入的依赖包,而且间接依赖的也会导进去, 没有被使用的则不导入。

如果遇到那种动态导入模块的代码时,却无法找到关联的包,可以修改spec后缀文件来说明,在spec文件“hiddenimports”处标记要使用的包(此处略)。

修改spec文件后,不能直接pyinstaller -D main.py命令打包,否则会覆盖已修改的spec文件。改用  pyinstaller -D main.spec方法来指定要使用的spec文件。

7.其他问题

上面做完,以为万事大吉时,在服务器上运行main.exe出错,可能是因为服务器系统太旧,提示:

Failed to execute script pyi_rth_multiprocessing

解决方法放在前一篇博文里 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值