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

RHEL 8.6中创建venv后为何出现“Module not found”?

问题:Python venv未加--system-site-packages时无法导入系统包,但pip list显示包存在

环境与问题现象

  • 运行环境:RHEL 8.6,Python 3.6.8,无root权限,无法修改Python版本、增删模块,仅存在单一系统Python实例
  • 未激活虚拟环境时:执行pip3 list能看到requests、werkzeug等包,且可正常导入使用
  • 创建并激活venv后:
    • 执行python3 -m venv .pvenv创建虚拟环境,通过source .pvenv/bin/activate激活
    • 激活后执行pip3 list,显示的包列表与系统Python完全一致
    • 但执行python3尝试导入requests等包时,提示ModuleNotFoundError
  • 补充测试:使用python3 -m venv --system-site-packages .pvenv创建的venv可正常导入系统包,但不符合无该选项时的隔离预期

解决方案与原因分析

原因

Python 3.6的venv在RHEL这类系统中,可能存在pip识别路径与Python实际导入路径不匹配的情况:系统通过rpm等方式安装的包,其路径被venv的隔离机制排除,但pip仍能读取系统的包元数据,导致pip list显示存在包,但Python运行时找不到对应的模块文件。

解决方法

手动将系统site-packages路径添加到venv的Python搜索路径中,既保留venv的隔离性(新安装的包仅存于venv),又能使用系统已有的包:

  1. 获取系统site-packages路径:在未激活venv的状态下执行:
    python3 -c "import site; print(site.getsitepackages())"
    
    会输出类似['/usr/lib/python3.6/site-packages']的路径(以实际输出为准)
  2. 在venv中添加路径配置:激活venv后,执行以下命令(替换为上一步得到的路径):
    echo "/usr/lib/python3.6/site-packages" > .pvenv/lib/python3.6/site-packages/system-packages.pth
    
  3. 验证:激活venv后执行:
    python3 -c "import requests; print(requests.__version__)"
    
    若正常输出版本号,说明问题解决

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:22:21