如何在不污染venv虚拟环境的前提下使用Jupyter Notebook或IPython开展开发?
如何在不污染venv虚拟环境的前提下使用Jupyter Notebook或IPython开展开发?
这个问题我之前也纠结过好一阵!既要守着项目venv的干净,又舍不得交互式工具的便利,试过几种方法后,总结出几个实用的方案,分享给你:
方案一:给项目venv注册Jupyter内核(最常用)
这是社区里最流行的做法,核心就是只给项目venv装一个轻量的内核依赖,把它接入Jupyter生态:- 先激活你那个干干净净的项目venv:
Linux/macOS:source venv/bin/activate
Windows:venv\Scripts\activate - 只安装
ipykernel这个小依赖(它是Jupyter和venv之间的桥梁,不会乱加其他冗余包):pip install ipykernel - 把当前venv注册成Jupyter的可选内核:
python -m ipykernel install --user --name=my-project-venv --display-name="Python (我的项目Venv)" - 之后你可以在全局环境或者专门的工具虚拟环境里装Jupyter/IPython,打开Jupyter后,就能在新建Notebook的内核列表里选你刚才注册的项目venv了。这个内核会直接使用venv里的所有包,完全不会污染项目的核心依赖。不用的时候还可以删掉这个内核:
jupyter kernelspec uninstall my-project-venv
- 先激活你那个干干净净的项目venv:
方案二:用pipx把Jupyter/IPython当全局工具用
pipx是个神器,专门用来隔离Python命令行工具的安装环境,它会给每个工具单独建一个小venv,不会影响全局或项目环境:- 先装pipx:
python -m pip install --user pipx,跟着提示把pipx的执行路径加到系统环境变量里就行 - 用pipx装Jupyter:
pipx install jupyter,或者单独装IPython:pipx install ipython - 之后不管你激活哪个项目venv,直接敲
jupyter notebook或ipython,它们会自动识别当前venv的Python环境和已装包,完全不用在项目venv里碰Jupyter相关的依赖,隔离效果拉满。
- 先装pipx:
方案三:建个专属工具venv管理交互式工具
如果你不想用pipx,也可以自己建一个专门放开发工具的venv,把Jupyter、IPython都装在这里:- 比如在用户目录下建一个:
python -m venv ~/dev-tools-venv(Windows可以放C:\Users\你的用户名\dev-tools-venv) - 激活这个工具venv,装需要的工具:
pip install jupyter ipython - 开发时先激活项目的干净venv,然后直接运行工具venv里的Jupyter/IPython(比如
~/dev-tools-venv/bin/jupyter notebook),这样工具会自动使用当前激活的项目venv的Python环境,工具本身的依赖全在自己的venv里,和项目venv完全不沾边。
- 比如在用户目录下建一个:
另外提个小技巧:如果你的项目用了requirements文件,可以把ipykernel加到requirements-dev.txt里,作为开发依赖,这样团队里的其他人也能快速配置内核,不用单独操作。
备注:内容来源于stack exchange,提问作者SRobertJames
相关产品推荐
相关产品推荐

