PyCharm环境下sys.version与os.system("python -V")版本差异咨询
这事儿其实很好理解,核心区别在于这两个命令读取版本的对象完全不同——一个指向当前代码运行的解释器,另一个是系统shell调用的外部Python程序:
sys.version:直接读取当前运行的解释器版本
当你在PyCharm集成控制台里执行import sys; print(sys.version)时,这个命令是直接从你当前正在使用的Python解释器(也就是你手动设置的2.7.14)中获取版本信息。它是运行时环境的一部分,完全和当前代码的执行上下文绑定,不会涉及任何外部调用,所以结果必然和你PyCharm配置的解释器版本一致。os.system("python -V"):调用系统shell执行全局的python命令os.system()的本质是让你的操作系统启动命令行shell,然后执行你传入的命令。这里的python是系统PATH环境变量中优先级最高的那个Python可执行文件的别名——它和你PyCharm里配置的解释器可能毫无关系。比如你的系统默认Python是3.x,或者PATH里的python指向了另一个安装路径的版本,那这个命令返回的就是那个版本的信息,和当前运行代码的解释器完全脱节。
举个具体的场景:你PyCharm用的是2.7.14,但你的系统PATH里python指向的是另一个路径的3.8版本,那os.system("python -V")就会返回3.8.x的版本,而sys.version依然是2.7.14。
如果想让os.system调用的是当前代码使用的同一个解释器,你可以用sys.executable获取当前解释器的完整路径,然后执行:
import os import sys # 用当前解释器的路径执行版本查询 os.system(f'"{sys.executable}" -V')
这样得到的版本就会和sys.version完全一致了。
内容的提问来源于stack exchange,提问作者Jason

