pyinstaller打包教程及问题处理

  1. exe打包

注意:

虚拟环境依赖包(打包成requirements.txt):

pip install -r requirements.txt

 安装项目依赖 pip install requirements.txt

  1. 环境准备
  1. 安装虚拟环境

pip install pyinstaller

pyinstaller -F xxxxxxx.py

生成xx.exe

Requirements.txt:

altgraph==0.17.2
future==0.18.2
pefile==2022.5.30
pyinstaller==5.2
pyinstaller-hooks-contrib==2022.8
pywin32-ctypes==0.2.0

  1. 打包

3.1多文件打包

  1. 调试,在终端输入app.exe回车,可以看到报错(不是双击运行)
  2.  

3.2单文件打包

pyinstaller -F xxxxxxx.py

 

3.2.1打包的名称:

pyinstaller -F app.py -n bb

3.3 路径问题

3.3.1 多文件打包,不会报错

3.3.2 单文件打包,报错

为什么报错呢?

运行单文件打包的,会解压到电脑的临时目录(具体报错如下)

3.3.1 sys.argv (当前文件执行所在目录文件)

import sys


print(sys.argv)
print(sys.argv[0])

执行返回:

['C:/Users/DELL/PycharmProjects/pyinstaller-g/demo.py']

C:/Users/DELL/PycharmProjects/pyinstaller-g/demo.py

执行文件(只有文件):

import sys,os

#找到真正的路径
print(os.path.realpath(sys.argv[0]))


print(sys.argv)

运行:

区别如下:

import time,os,sys
# BASE_DIR =os.path.dirname(os.path.abspath(__file__))
BASE_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))
print(BASE_DIR)
print("环境使用xxxx系统")
path = os.path.join(BASE_DIR,"account.txt")
with open(path,"r",encoding="utf-8") as file:
    data = file.read().strip()
print(data)



time.sleep(5)

3.4 模块导入问题

满足要求

但是,如何遇到动态导入模块的代码,他是无法找到关联包

import time,sys
import importlib

print("=================欢迎使用xxx系统===================")


card = importlib.import_module("utils.card")
v1 = card.get_number()
print(v1)
time.sleep(5)

动态导入报错:

手动写入要导入的包(在bb.spec文件里)

打包命令:

报错:

-F要去掉

pyinstaller  bb.spec(原来的打包命令会把spec文件给覆盖掉,)

运行成功

如果遇到:

 使用:

pyinstaller --add-data="C:\softwork\Python\Python39\Lib\site-packages\pyecharts;pyecharts" -F run_main.py
 

通过文件导包:

datas=[('C:\\softwork\\Python\\Python39\\Lib\\site-packages\\pyecharts', 'pyecharts'), ('C:\\softwork\\Python\\Python39\\Lib\\site-packages\\openpyxl', 'openpyxl'),('C:\\softwork\\Python\\Python39\\Lib\\site-packages\\pymysql', 'pymysql')]

如下图:

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(
    ['run_main.py'],
    pathex=[],
    binaries=[],
    datas=[('C:\\softwork\\Python\\Python39\\Lib\\site-packages\\pyecharts', 'pyecharts'), ('C:\\softwork\\Python\\Python39\\Lib\\site-packages\\openpyxl', 'openpyxl'),('C:\\softwork\\Python\\Python39\\Lib\\site-packages\\pymysql', 'pymysql')],
    hiddenimports=["pyecharts","openpyxl.load_workbook","et-xmlfile","pymysql"],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='run_main',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

运行成功:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值