Python中.venv虚拟环境为何能调用系统级Jupyter Notebook?
问题解答
核心原因拆解
1. 为什么虚拟环境中能直接启动Jupyter?
你通过--user参数安装的Jupyter,其可执行文件会被放置在~/.local/bin目录下,这个目录默认包含在系统的PATH环境变量里。当你激活虚拟环境后,虚拟环境的bin目录会被优先加入PATH,但如果虚拟环境内没有安装Jupyter,系统就会按PATH的顺序继续查找,最终找到用户级安装的Jupyter可执行文件并运行——这个Jupyter属于你之前的用户级Python环境,和当前虚拟环境的Python没有绑定关系。
2. 为什么虚拟环境的Python无法访问用户级的TensorFlow?
python3 -m venv创建的虚拟环境默认是完全隔离的:它的Python解释器只会加载虚拟环境内部lib/python3.8/site-packages目录下的包,不会读取用户级(~/.local/lib/python3.8/site-packages)或系统级的包资源。所以你在虚拟环境的python3终端里无法导入TensorFlow、pip freeze无输出,都是虚拟环境隔离机制正常工作的表现。
解决方法:让Jupyter使用虚拟环境的Python内核
如果想在Jupyter中使用虚拟环境的包,需要把虚拟环境注册为Jupyter的内核:
- 激活虚拟环境后,先安装ipykernel:
(.venv)$ python3 -m pip install ipykernel - 将虚拟环境注册为Jupyter内核:
(.venv)$ python3 -m ipykernel install --user --name=my-venv-kernel - 重新启动Jupyter Notebook,新建notebook时选择
my-venv-kernel,就能使用虚拟环境内的包了。
内容的提问来源于stack exchange,提问作者Della
相关产品推荐
相关产品推荐

