在Jupyter Notebook中使用Shell命令激活venv虚拟环境的咨询
问题原因
你之前的操作失败是因为IPython中!开头的系统命令每次都会启动一个独立的临时子shell,执行完成后子shell就会销毁:第一条激活虚拟环境的命令只会作用于第一个子shell,第二条!echo命令运行在全新的子shell中,自然拿不到前一个shell的环境变量,也就无法验证激活结果。
可行解决方法
方法1:将虚拟环境注册为Jupyter内核(最推荐)
这是长期使用该环境跑Notebook的最优方案,注册完成后可以直接切换内核使用整个虚拟环境的依赖,无需每次手动激活:
- 打开Windows终端,激活你的probe-detection虚拟环境:
C:/Users/212765830/probe-detection/scripts/activate
- 在激活后的环境中安装ipykernel依赖:
pip install ipykernel
- 将该虚拟环境注册为Jupyter可用内核:
python -m ipykernel install --user --name=probe-detection
- 重启Jupyter Notebook后,就可以在新建文件时直接选择
probe-detection内核,也可以在已打开的Notebook顶部菜单栏依次选择「Kernel」→「Change Kernel」→probe-detection,切换后整个Notebook的运行环境就是你创建的虚拟环境。
方法2:同子shell执行命令(临时单次使用)
如果只是需要临时跑一次该环境下的脚本,可以把激活命令和后续要执行的命令用&连接,放在同一个!调用中,保证所有操作都在同一个子shell中生效:
# 示例:激活环境后打印环境变量+运行指定脚本 !C:/Users/212765830/probe-detection/scripts/activate & echo %VIRTUAL_ENV% & python your_script.py
方法3:直接指定虚拟环境依赖路径
如果不想注册内核,也可以在Notebook开头手动把虚拟环境的依赖库路径加到当前Python解释器的搜索路径首位,后续导入库时会优先从虚拟环境目录查找:
import sys sys.path.insert(0, r"C:\Users\212765830\probe-detection\Lib\site-packages")
内容的提问来源于stack exchange,提问作者Phillip Ng
相关产品推荐
相关产品推荐

