检查模块是否安装在Jupyter中,而不是安装在内核中



我有一个基本的conda环境,我从中运行了jupyter lab:

(base) $ jupyter lab

然后,在另一个虚拟环境中,我完成了

(venv) $ pip install ipywidgets
(venv) $ pip install ipykernel
(venv) $ python -m ipykernel install --user --name my-kernel

因此,在Jupyter实验室(它是从我的base环境中启动的(中,我可以打开一个笔记本并选择my-kernel作为内核。

在这样一个笔记本电脑(运行my-kernel(中,我如何检测JupyterLab(从我的base环境启动(是否安装了ipywidgets

我不能只做import ipywidgets,然后看看我是否得到ModuleNotFoundError,因为这只会检测到ipywidgets是否安装在my-kernel中——然而,我正在努力查明它是否安装在我的base环境中。

这在一定程度上取决于您如何创建虚拟环境以及使用的操作系统。也就是说,对于conda用户来说,这将有所不同。您可以在基本环境中对pip进行子流程调用,并返回已安装软件包的列表。

import sys
import subprocess
from pathlib import Path
def is_installed_in_base(pkg_name):
pip = Path(sys.base_prefix).joinpath('bin', 'pip')  # Linux
# pip = Path(sys.base_prefix).joinpath('Scripts', 'pip.exe')  # Windows
proc = subprocess.Popen(
[pip.as_posix(), 'list'], 
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
out, err = proc.communicate()
packages = out.decode().lower().split('n')[2:]
packages = [pkg.split()[0].strip() for pkg in packages if pkg]
return pkg_name.lower() in packages
is_installed_in_base('ipywidgets')
# returns:
True

我想可能是

import ipywidgets
print(ipywidgets.__file__)

相关内容

  • 没有找到相关文章

最新更新