根本原因在于版本信息来源不同:__version__ 来源于源码文件硬编码,而 pip list 读取的是安装时生成的 dist-info/pkg-info 中的 version 字段,二者完全独立、互不影响。

根本原因不是代码写错了,而是版本信息来源不同:一个来自源码文件硬编码,一个来自pip元数据。
__version__ 是手动写的字符串,不是自动生成的
绝大多数 Python 包(包括 OpenOPC)的 __version__ 是直接在 __init__.py 或主模块里用字符串赋值的,比如:__version__ = "1.2.3"。它不读取任何外部文件,也不校验安装状态——改了文件就生效,复制过去就跟着走。
这意味着:
- 如果你手动把
OpenOPC.py复制到site-packages,__version__就是你复制的那个文件里写的值 - 而
pip list显示的是dist-info或egg-info目录里PKG-INFO文件中记录的版本,由安装时的setup.py或pyproject.toml决定 - 两者完全独立,改一个不影响另一个
pip list 读的是安装元数据,不是 .py 文件内容
pip list 解析的是包安装后生成的 openopc-1.2.3.dist-info/PKG-INFO(或类似路径),里面 Version: 字段才是它显示的依据。这个字段来自打包时的配置,不是运行时动态读取的 __version__。
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
常见导致不一致的操作:
- 用
pip install装了 v1.1.0,之后又手动覆盖OpenOPC.py为 v1.2.3 的代码 ——__version__变了,但pip list还是 1.1.0 - 在虚拟环境中 pip 安装,却把文件复制到了系统 Python 的
site-packages—— 两个环境各有一套版本记录 - 用
pip install -e .开发安装时没更新setup.py里的version,只改了代码里的__version__
怎么确认你 import 的到底是不是 pip 安装的那个包?
别猜,直接查路径和来源:
- 在 Python 里执行:
import OpenOPC; print(OpenOPC.__file__),看输出路径是否和pip show OpenOPC显示的Location:一致 - 如果不一致,说明你在用“野包”——可能是手动放的、IDE 自动补全带进来的、或者 PYTHONPATH 指向了别的地方
- 运行
python -c "import OpenOPC; print(OpenOPC.__version__, OpenOPC.__file__)"和pip show OpenOPC对比,三者(版本、路径、pip Location)必须全部对得上才算真正统一
最稳妥的做法永远是:删掉所有手动复制的文件,用 pip install 或 pip install -e 统一管理。一旦混合使用源码覆盖和 pip 安装,__version__ 和 pip list 不一致就是必然结果,不是 bug,是设计使然。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










