我很好奇跑点子。每次我在Windows的命令外壳中运行pip时,都这样
c:\python27\script>pip install numpy
但是,我想知道是否可以在python idle中运行它。
import pip
pip.install("numpy")
不幸的是,它不起作用。
这个问题是,或者应该是关于如何从python程序中运行pip。 IDLE与此版本的问题没有直接关系。
[扩展J. J. Hakala的评论:pip install pillow
之类的命令行在空格处分割为sys.argv
。当pip作为主要模块运行时,它将调用pip.main(sys.argv[1:])
。如果一个人输入点,则可以调用pip.main(arg_line.split())
,其中arg_line
是pip
之后的命令行部分。
[去年九月(2015),我尝试使用另一个Python程序中的此意外API,并报告了关于跟踪器问题23551的初步结果。讨论和随后的结果。
在一个进程中执行多个命令的问题是,一些pip命令不仅缓存通常保持不变的sys.path,而且还缓存通常更改的已安装软件包的列表。由于pip设计为每个进程运行一个命令,然后退出,因此它永远不会更新缓存。当使用pip.main在一个进程中运行多个命令时,在缓存后给出的命令可能会使用陈旧且不再正确的缓存。例如,list
之后的install
显示了before the install的状态。
对于要检查pip输出的程序的第二个问题是,它进入了stdout和stderr。我发布了一个program,它将这些流捕获到程序变量中作为运行pip的一部分。
如L_Pav建议的那样,对每个pip命令使用子过程调用,尽管效率较低,但可以解决这两个问题。 communicate
方法使输出流可用。请参阅子流程文档。
目前尚无官方方法,可以使用pip.main,但当前的空闲会话不会'看到'此已安装的软件包。
how to add a "high level" programmatic API for pip上有很多讨论,这似乎很有希望。
实际上,我认为您可以使用subprocess.Popen(apt-get numpy)
,尽管不确定如何使用PIP。
如果您在Mac上,您应该可以这样做:
希望对您有帮助。