Python | 系统兼容性问题小计

王先生
2025-04-10 / 0 评论 / 7 阅读 / 正在检测是否收录...

问题描述

最近开发一个小工具,用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

原因分析

  1. mysql-connector-python版本兼容性问题

    • 当前使用mysql-connector-python 8.0.33版本
    • 该版本使用了Python 3.7+才支持的__future__.annotations特性
    • 在Python 3.6环境下无法正常运行
  2. 依赖版本锁定问题

    • 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环境(推荐)

  1. 升级到Python 3.7或更高版本
  2. 更新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. 使用虚拟环境

  1. 创建新的虚拟环境:

    python -m venv venv
  2. 激活虚拟环境:
  3. Windows: venv\Scripts\activate
  4. Linux/Mac: source venv/bin/activate
  5. 安装依赖:

    pip install -r requirements.txt

验证步骤

  1. 检查Python版本:

    python --version
  2. 验证依赖安装:

    pip list | findstr "mysql-connector-python"
  3. 运行测试:

    python main.py

注意事项

  1. 如果继续使用Python 3.6:

    • 必须使用mysql-connector-python 8.0.22或更低版本
    • 其他依赖包也需要检查版本兼容性
  2. 如果升级到Python 3.7+:

    • 可以使用最新版本的mysql-connector-python
    • 建议使用版本范围而不是精确版本号
  3. 版本管理:

    • 在requirements.txt中明确标注Python版本要求
    • 使用虚拟环境隔离不同项目的依赖

参考资源

评论 (0)

取消