问题描述
最近开发一个小工具,用python编写的,需要访问mysql 且flask提供web服务。
刚开始用nuitka打包,后面 需要兼容 win7 以及其他一些原因,换用 pyinstaller 打包。
因为要兼容win7刚开始决定用Python3.7开发打包,后实测不行经查询发现win7python3.7需要安装补丁才能支持。
改为python3.6。改为3.6 之后发现 报错 SyntaxError: future feature annotations is not defined。
错误信息
在Python 3.6环境下运行时出现以下错误:
Traceback (most recent call last):
File ".\main.py", line 2, in <module>
from src.server import Server
File "...\src\server.py", line 9, in <module>
from .database import DatabaseManager
File "...\src\database.py", line 2, in <module>
import mysql.connector
File "...\mysql\connector\__init__.py", line 32, in <module>
from .connection_cext import CMySQLConnection
File "...\mysql\connector\connection_cext.py", line 40, in <module>
from .abstracts import MySQLConnectionAbstract
File "...\mysql\connector\abstracts.py", line 33
from __future__ import annotations
^
SyntaxError: future feature annotations is not defined
原因分析
mysql-connector-python版本兼容性问题
- 当前使用mysql-connector-python 8.0.33版本
- 该版本使用了Python 3.7+才支持的
__future__.annotations
特性 - 在Python 3.6环境下无法正常运行
依赖版本锁定问题
- requirements.txt中使用了精确版本号(==)
- 没有考虑不同Python版本的兼容性需求
解决方案
1. 降级mysql-connector-python版本
为了在Python 3.6环境下运行,建议使用8.0.22或更低版本:
Flask==2.0.3
mysql-connector-python==8.0.22
pyinstaller==4.10
pyinstaller-hooks-contrib==2022.0
python-dotenv==0.20.0
2. 升级Python环境(推荐)
- 升级到Python 3.7或更高版本
- 更新requirements.txt为:
Flask>=2.0.3,<3.0.0
mysql-connector-python>=8.0.22
pyinstaller>=4.10
pyinstaller-hooks-contrib>=2022.0
python-dotenv>=0.20.0
3. 使用虚拟环境
创建新的虚拟环境:
python -m venv venv
- 激活虚拟环境:
- Windows:
venv\Scripts\activate
- Linux/Mac:
source venv/bin/activate
安装依赖:
pip install -r requirements.txt
验证步骤
检查Python版本:
python --version
验证依赖安装:
pip list | findstr "mysql-connector-python"
运行测试:
python main.py
注意事项
如果继续使用Python 3.6:
- 必须使用mysql-connector-python 8.0.22或更低版本
- 其他依赖包也需要检查版本兼容性
如果升级到Python 3.7+:
- 可以使用最新版本的mysql-connector-python
- 建议使用版本范围而不是精确版本号
版本管理:
- 在requirements.txt中明确标注Python版本要求
- 使用虚拟环境隔离不同项目的依赖
评论 (0)