Python中的.venv如何从系统继承Jupyter Notebook?

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

不是普通的虚拟环境用户。我只是习惯在用户级别安装 pip 包,例如

python3 -m pip install --user tensorflow

并与之合作。这也是安装我的 jupyter 实验室以及使用 ipython 笔记本的方法。

但直到最近,我才养成了通过创建虚拟环境在项目级别安装 pip 包的习惯

python3 -m venv .venv
source .venv/bin/activate
(.venv)$ python3 -m pip install tensorflow # Within the virtual environment, example
问题

即使在虚拟环境中,每当我跑步时

(.venv) $ jupyter notebook

它会启动,无需在环境中显式安装 jupyter 。所以它几乎看起来像是不知何故 jupyter 是从我的用户级包继承的。但是,在环境中,当我尝试这些

(.venv) $ python3 -m pip freeze # Empty, no package (.venv) $ python3 >>> import tensorflow # Module not found, as tf exists only in the base environment
那么,这是怎么回事?如果

.venv

提供了与基础的真正隔离(因为tensorflow似乎没有从基础继承),它为什么会继承jupyter?

平台(如果相关)
Ubuntu 22.04 上的 Python 3.8.10。

python python-3.x jupyter-notebook pip pipenv
1个回答
0
投票
当您运行

jupyter

 时,shell 会在 
$PATH
 中查找它。激活的虚拟环境将其 
.venv/bin
 前置到 
$PATH
(这实际上几乎是 
.venv/bin/activate
 的全部功能,其他所有内容都在 Python 解释器内实现)。如果在当前虚拟环境 shell 中找不到 
jupyter
,则在其他目录中搜索它。一旦找到 shell 就会执行它。这里没什么特别的。

更奇特的部分是:

jupyter

是一个带有
a shebang的脚本,因此它运行与当前虚拟环境不同的Python解释器,并且Python解释器从不同的site-packages
导入模块。我希望这能解释。

要找出

jupyter

在哪里:

which jupyter
找出它的shebang:

head -1 `which jupyter`
    
© www.soinside.com 2019 - 2024. All rights reserved.