pyinstaller python 使用ecs/pos操作pos小票打印机
# pyinstaller --onefile --noconsole --add-data "logo.bmp:." --add-data "D:\PythonTest\ecs_pos_print\.venv\Lib\site-packages\escpos\capabilities.json:\escpos" Main_Windows.py
简介:#
python也可以操作pos小票打印机,使用串口命令来打印,打印速度和打印质量不是windows驱动打印可以比的,毕竟是使用内置字库,算是硬件打印吧。
一:安装ecspos#
python-escpos/python-escpos: Python library to manipulate ESC/POS printers (github.com)
pip install python-escpos==v3.0a9
目前最新版本是v3.0a9,是测试版本,需要指定版本号才能安装。
二:安装usb驱动#
Zadig - USB driver installation made easy (akeo.ie)
反正就是驱动不对,esc/pos就连不上打印机,我安装libusbk才可以正常使用python-ecspos。
尽管安装libusb-win32,也可以查看到USB打印机,但是无法操作,可能是pypthon-ecspos内部实现的不同。跟着用libusbk就好了。
在设备管理器找到你的USB打印支持,硬件ID,看一下PID,VID,打开zadig,options--list all devices,下拉选择pic,vid一致的设备,然后右边选择libusbk,reinstall driver即可。
三:简单的代码#
from escpos.printer import Usb """ Seiko Epson Corp. Receipt Printer (EPSON TM-T88III) """ p = Usb(0x067B, 0x2305, 0, profile="TM-T88III") #这里改VID,PID p.text("Hello World\n") p.image("logo.gif") p.barcode('4006381333931', 'EAN13', 64, 2, '', '') p.cut()
注意改VID,PID.
四:pyinstaller打包#
直接打包后提示我
escpos\capabilities.json 找不到
所以增加静态文件
# pyinstaller --onefile --noconsole --add-data "logo.bmp:." --add-data "D:\PythonTest\ecs_pos_print\.venv\Lib\site-packages\escpos\capabilities.json:.\escpos" Main_Windows.py
这个logo是需要打印的,所以也打包进去,这个json就是提示找不到的文件。
--add-data 原文件路径:目标路径。
logo.bmp,我直接打包进根目录(.)
json则是打包到(.\escpos)目录。
打包完成后可以正常打开exe文件了。
五:动态使用打印机#
当我使用pyqt,加上GUI界面后,发现无法使用GUI界面读取的
0x067B, 0x2305
这个参数进行连接,如果写死连接参数,再去打印
p = Usb(idVendor=0x067B, idProduct=0x2305, profile="POS-5890") print(p.idVendor,p.idProduct)
1659 8965
16进制变成了10进制,而读入的是str。
尝试进行16进制到10进制转换后传入参数(int(id,16),可以打印,代码如下:
# 初始化打印机 vid = self.lineEdit_VID.text() pid = self.lineEdit_PID.text() # print(vid,pid) vid=int(vid,16) pid=int(pid,16) # print(vid,pid) # self.print = Usb(idVendor=0x067B, idProduct=0x2305, profile="POS-5890") self.print = Usb(idVendor=vid, idProduct=pid, profile="POS-5890")
六:usb.core.NoBackendError: No backend availabl#
临时打包一个带控制台窗口的。
pyinstaller --onefile #单文件 #--noconsole #没有控制台窗口 --add-data "D:\PythonTest\ecs_pos_print\daqiao_logo.bmp:." #增加静态文件 --add-data "D:\PythonTest\ecs_pos_print\.venv\Lib\site-packages\escpos\capabilities.json:.\escpos" #增加escpos需要的文件 Main_Windows.py #py原文件
D:\PythonTest\ecs_pos_print\dist>Main_Windows.exe Main_Windows.py:16: DeprecationWarning: sipPyTypeDict() is deprecated, the extension module should use sipPyTypeDictRef() instead 3 Traceback (most recent call last): File "Main_Windows.py", line 119, in buttonClicked File "escpos\printer.py", line 83, in __init__ File "escpos\printer.py", line 90, in open File "usb\core.py", line 1309, in find usb.core.NoBackendError: No backend available
几经查询,发现是没有找到libusb0.dll,一般路径在 C:\Windows\System32\libusb0.dll
甭搞复杂的,直接打包进去好了。
pyinstaller
--onefile #单文件
--noconsole #没有控制台窗口
--add-data "D:\PythonTest\ecs_pos_print\daqiao_logo.bmp:." #增加静态文件
--add-data "D:\PythonTest\ecs_pos_print\.venv\Lib\site-packages\escpos\capabilities.json:.\escpos" #增加escpos需要的文件
--add-binary "C:\Windows\System32\libusb0.dll:." #增加libusb0.dll
Main_Windows.py #py原文件
七:静态文件打包后无法引用#
似乎又遇到了静态文件找不到的情况。
在py源文件顶部增加
if getattr(sys, 'frozen', None): basedir = sys._MEIPASS else: basedir = os.path.dirname(__file__) logo_bmp=os.path.join(basedir, 'logo.bmp')
后面需要引用静态文件的时候,就直接引用logo_bmp即可
作者:上官飞鸿
出处:https://www.cnblogs.com/jackadam/p/17777686.html
版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2019-10-20 定制flask-admin的主页
2018-10-20 flask-session 在redis中存储session