You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言通过popen调用Python27执行脚本,出现多版本Python相关报错

问题原因
  • 环境变量被篡改:你重装GDAL时,安装程序自动修改了PYTHONPATH环境变量,在原有指向Python2.7的路径基础上,新增了Python3.7、Python3.9以及Anaconda的相关路径,优先级高于原有配置,导致Python2.7运行时错误加载了为Python3开发的库文件。
  • 调用逻辑不严谨:你C代码中使用system(myPythonFile.py -d SomeDirectory)直接执行py文件,Windows会调用系统默认关联的Python解释器执行脚本,而非你Path中配置的Python2.7,这也是触发版本不匹配的核心原因之一。
  • 包版本不兼容:报错中出现的os.add_dll_directory是Python3.8才新增的接口,file=sys.stderr是Python3支持的关键字参数写法,Python2.7均不支持;且你加载的numpy、matplotlib等包均是为Python3编译的版本,在Python2.7环境下运行必然报错。
解决方案
  • 修复环境变量:打开系统环境变量配置界面,分别检查用户变量和系统变量中的PYTHONPATH项,删除所有指向Python3.7、Python3.9、Anaconda的路径,仅保留原有配置:C:\Python27、C:\Python27\Lib、C:\Python27\DLLs,修改完成后重启电脑或重启开发工具使配置生效。
  • 修正C代码调用逻辑:执行py脚本时必须显式指定Python2.7解释器路径,避免使用系统默认关联的版本,将原system调用行修改为:
system("C:/Python27/python.exe myPythonFile.py -d SomeDirectory");

若你之前打开的popen管道没有后续使用逻辑,建议补充pclose(py)关闭管道,避免资源泄漏。

  • 校验Python2.7的第三方包:打开cmd执行python --version确认返回Python2.7.x版本,再执行pip list检查numpy、GDAL等依赖包是否安装在Python2.7环境下。若缺失,安装对应支持Python2.7的版本:numpy需安装1.16.x系列版本(最后一个支持Python2.7的numpy版本),GDAL需下载对应Python2.7的Windows预编译二进制包安装,不要安装适配Python3的版本。
  • 问题排查辅助:如果修改后仍有报错,可在你的Python脚本开头加入以下代码,确认运行环境和加载路径是否正确:
import sys
print(sys.version)
print(sys.path)

若输出版本不是2.7,或sys.path中包含Python3、Anaconda的路径,说明环境变量仍未配置正确,需重新检查。

内容的提问来源于stack exchange,提问作者Supriya Bhide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:48:00