简单的测试代码
# main.py
import mysql.connectorDB_HOST='localhost'
DB_PORT=3306
DB_NAME='lover'
DB_USER='root'
DB_PASSWORD='xxxx'# 连接数据库
connection = mysql.connector.connect(host=DB_HOST,port=DB_PORT,database=DB_NAME,user=DB_USER,password=DB_PASSWORD)if connection.is_connected():cursor = connection.cursor()cursor.execute("select database();")record = cursor.fetchone()print("你连接到的数据库是:", record)cursor.close()connection.close()print("数据库连接关闭成功!")
else:print("数据库连接失败!")
使用pyinstall简单打包
打包命令:pyinstaller .\main.py
运行打包后的可执行文件
报错如下:
Traceback (most recent call last):File "main.py", line 10, in <module>File "mysql\connector\pooling.py", line 322, in connectFile "mysql\connector\connection_cext.py", line 142, in __init__File "mysql\connector\abstracts.py", line 1605, in connectFile "mysql\connector\connection_cext.py", line 354, in _open_connection
RuntimeError: Failed raising error.
[PYI-10064:ERROR] Failed to execute script 'main' due to unhandled exception!
报错的原因是PyInstaller未能正确打包MySQL Connector的C扩展模块。也就是这个目录里面的文件Lib\site-packages\mysql\vendor\plugin
解决办法
- 手动复制目录过去
不使用--onefile
参数打包,将Lib\site-packages\mysql\vendor\plugin
复制到_internal
目录,要保证目录的完整性就是说复制后的目录应该是这样的_internal\mysql\vendor\plugin
- 使用命令添加目录
打包命令:pyinstaller --add-data ".venv/Lib/site-packages/mysql/vendor/plugin;mysql/vendor/plugin" .\main.py
注意命令中.venv/Lib/site-packages/mysql/vendor/plugin
和mysql/vendor/plugin
并不是重复了,而是前面是源目录后面是目的目录,中间用分号;
隔开。
检查打包结果
打开_internal
目录我们可以看见mysql/vendor/plugin
扩展目录就证明打包成功了
运行打包后的程序。
打包成单文件
打包命令:pyinstaller --onefile --add-data ".venv/Lib/site-packages/mysql/vendor/plugin;mysql/vendor/plugin" .\main.py