【发布时间】:2012-01-29 14:05:42
【问题描述】:
我想知道是否可以在不离开 IPython shell 的情况下安装 python 包。
【问题讨论】:
标签: python module installation ipython
我想知道是否可以在不离开 IPython shell 的情况下安装 python 包。
【问题讨论】:
标签: python module installation ipython
请参阅@Chronial 中的the accepted answer,这是在现代 ipython 或 jupyter(截至 2018 年)中执行此操作的最佳方法是使用 the %pip magic:
%pip install my_package
以下 2011 年的答案现已过时:请参阅 the accepted answer,了解在现代 jupyter 中执行此操作的更简单方法。
您可以像这样使用! 前缀:
!pip install packagename
! 前缀是 %sc 命令运行 shell 命令的简写。
您还可以使用!! 前缀,它是%sx 命令的简写,以执行shell 命令并捕获其输出(默认保存到_ 变量中)。
【讨论】:
!pip install packagename.
! 并解释了!!、%sc 和%sx。我将建议 iPython 维护者更新%quickref 文档,明确提及! 和!! 作为替代!
!pip install 时,该软件包仅安装在 3.5 版中。
此答案已过时:请参阅the accepted answer,了解在现代 jupyter 中更简单的方法。
aculich's answer 并非在所有情况下都有效,例如:
python 二进制运行它正确的命令是:
import sys
!{sys.executable} -m pip install requests
【讨论】:
import pip
pip.main(['install', 'package_name'])
除非pip 在您的 $PATH 中(例如在 Windows 上),否则上述基于 shell 的答案不起作用。
【讨论】:
在现代 ipython 或 jupyter 中执行此操作的最佳方法是使用 the %pip magic:
%pip install my_package
【讨论】:
我喜欢 hurfdurf 的回答,但 iPython 本身可能无法识别新模块(特别是如果它添加到库路径中)。这是一个使用 iPython 3 的增强示例:
import pip
pip.main(['install','pygame'])
# import pygame at this point can report ImportError: No module named 'pygame'
import site
site.main()
# now with refreshed module path...
import pygame
【讨论】:
如果您使用Conda Package Manager,以下语法可能适合您的需要
$ conda install -c conda-forge <targetPackageName>
【讨论】:
!pip install packagename 或类似代码将不是真正的答案,如果我们有各种 python 版本,其中所需的 python 版本不是系统默认版本。此类代码将仅在系统默认 python 版本上安装软件包。在我看来,以下代码会有所帮助:
import pip
if int(pip.__version__.split('.')[0])>9:
from pip._internal import main
else:
from pip import main
main(['install', 'package_name']) # the strings in the square brackets could be specified as needed
此代码是基于 pip 版本编写的,可以在控制台中运行,并将应用于任何由控制台设置路径的 python 版本; import sys; sys.version, sys.path 可以查看此 python 版本规范。我不确定这是最好的方法,但上述代码适用于我的目的,!pip install packagename 或 %pip install packagename 没有(其中 python:2.7.9,pip:19.2.3,IPython QtConsole:3.1 .0).
【讨论】: