在 eclipse/pydev 中使用子进程运行 python3 时出错

问题描述 投票:0回答:1

在 eclipse/pydev Debian 11 中运行简单的测试 python3 脚本:

import subprocess
import os

subprocess.call(["python3", "-c", "print(123)"])

导致以下错误:

Fatal Python error: init_sys_streams: can't initialize sys standard streams
Python runtime state: core initialized
Traceback (most recent call last):
  File "/opt/python/3/3.11/lib/python3.11/io.py", line 54, in <module>
ImportError: cannot import name 'text_encoding' from 'io' (unknown location)

在控制台中运行该脚本效果很好。 我使用 python3,从源代码构建并安装在 opt 和虚拟环境中,也在 opt 中。 系统版本的Python在pydev中运行代码,自定义Python仅在控制台中运行。

Eclipse pydev 设置为使用 2 个版本的 python:opt 中的系统 3.9 和自定义 3.11。 我复杂的 PyQT 项目使用两个版本的 python 在 pydev 中运行良好,因此我的 python3 构建和虚拟环境看起来除了运行 python3 命令的子进程外都可以正常工作。

补充: 错误消息来自子 python 进程。 subprocess.call 外部的代码有效。

python subprocess pydev
1个回答
0
投票

解决了。

问题来自环境变量 PATH 和 PYTHONPATH 不匹配。

当我们将自定义 python 安装添加到 PyDev 解释器列表中时,并且 稍后在 PyDev python 项目中使用该解释器,运行配置有 PYTHONPATH 变量,它指向所使用解释器的 libs 和模块的 python 安装目录。 但是 PATH 变量保持不变,因为解释器将由 eclipse 使用绝对路径启动,就像它看起来的那样。 当我们使用“python3 ...”命令行通过 subprocess.call 启动子进程时,系统 python3 会使用非系统 PYTHONPATH 值生成。

解决方案是将 PATH 变量添加到项目运行配置中,该变量指向自定义 python 安装 bin 目录。

© www.soinside.com 2019 - 2024. All rights reserved.