Jupyter Notebook代码单元格中pip install与!pip install的适用场景咨询
在Jupyter Lab/Notebook中
pip install vs !pip install的适用场景 直接用pip install和加!的!pip install,核心是执行机制的不同,下面分情况说明:
两者的本质区别
!pip install:通过系统shell执行pip命令,相当于在终端里直接敲这条命令,会调用当前Jupyter内核绑定的Python环境对应的pip。- 直接
pip install:在Python进程内调用pip模块执行安装,等价于运行from pip._internal import main; main(['install', '包名']),本质是Python代码调用pip的API。
大部分场景两者效果一致
如果你的Jupyter内核对应的Python环境,和shell环境里的pip属于同一个环境,两种方式都会把包安装到该环境下,安装完成后重启内核就能正常导入使用。
必须用!pip install的场景
- 需要使用shell专属语法时:比如传递
--user参数安装到用户目录、引用shell环境变量(如!pip install $MY_PACKAGE)、使用管道/重定向(如!pip install 包名 > install.log),这些shell特性直接pip install无法解析。 - 要指定特定Python环境的pip时:比如你想给Python3.10环境安装包,用
!python3.10 -m pip install 包名,这种通过shell指定解释器的方式,直接pip install做不到,因为它只能用当前内核绑定的pip。 - 老版本Jupyter/IPython环境:IPython 7.x之前的版本,没有自动将
pip install映射为模块调用,直接执行会报错,必须加!。
直接pip install的局限性
- 无法使用任何shell相关的语法,比如通配符、环境变量、管道等。
- 极少情况下,如果你的Python环境中pip模块的路径配置异常,直接调用会失败,但
!pip install只要shell环境变量能找到pip就能运行。
注意事项
不管用哪种方式安装包,安装完成后都需要重启Jupyter内核,新安装的包才能被导入使用。
内容的提问来源于stack exchange,提问作者Mark Bakker
相关产品推荐
相关产品推荐

