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

Python虚拟环境打包异常:未安装的Numpy被PyInstaller纳入EXE

问题原因分析

你遇到的这个问题,核心在于你创建虚拟环境时没有完全隔离Anaconda的base环境。从你的CMD输出能看到,创建虚拟环境时显示了Using base prefix 'c:\\anaconda3'——这说明你用的virtualenv版本默认会继承base环境的site-packages路径,导致PyInstaller在打包时依然能从base环境中找到numpy,哪怕你的虚拟环境里没装这个包。

解决方法

按照下面的步骤操作,就能实现完全隔离的虚拟环境,打包时只包含你需要的依赖:

1. 创建完全隔离的虚拟环境

如果你坚持用virtualenv,需要加上--no-site-packages参数,确保虚拟环境不继承base环境的任何第三方包:

virtualenv test_env --no-site-packages

(注:较新版本的virtualenv默认已经是隔离模式,但你用的版本看起来是旧版,所以需要手动加这个参数)

或者改用Python自带的venv模块(Python 3.3+内置),它默认就是完全隔离的,不需要额外参数:

python -m venv test_env

2. 激活虚拟环境并安装必要依赖

激活虚拟环境后,先安装PyInstaller和你的脚本需要的numpy(因为你要打包的脚本依赖numpy):

# 激活虚拟环境
test_env\scripts\activate

# 安装依赖
pip install pyinstaller numpy

3. 重新打包脚本

现在再用PyInstaller打包,就只会把虚拟环境里的numpy和PyInstaller相关依赖打包进去,体积会明显缩小:

pyinstaller test.py -y -F
验证效果

完成上面的步骤后:

  • 激活虚拟环境直接运行python test.py,会正常执行(因为你已经安装了numpy)
  • 如果删除虚拟环境里的numpy,运行脚本会提示ModuleNotFoundError,此时打包出来的exe也会无法运行——这就说明虚拟环境完全隔离了,打包只会包含环境内的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:09:25