我对运行pip感到好奇。 每次我在Windows中的命令shell中运行pip
c:\python27\script>pip install numpy
但是,我想知道我是否可以在python空闲时运行它。
import pip
pip.install("numpy")
不幸的是,它没有用。
答案 0 :(得分:4)
这个问题是或者应该是关于如何从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的一部分。
对于每个pip命令使用子进程调用,如L_Pav所建议的那样,虽然效率较低,但解决了这两个问题。 communicate
方法使输出流可用。请参阅子流程文档。
答案 1 :(得分:4)
仍然无法发表评论,因此我添加了另一个答案。点子过去有several entrypoints。并且不建议直接调用pip或在过程中调用pip(如果您仍要这样做,则“ runpy”有点像recommended):
import sys
import runpy
sys.argv=["pip", "install", "packagename"]
runpy.run_module("pip", run_name="__main__")
但这也应该起作用:
try:
from pip._internal import main as _pip_main
except ImportError:
from pip import main as _pip_main
_pip_main(["install", "packagename"])
答案 2 :(得分:3)
目前没有正式的方法可以使用pip.main,但是你当前的空闲会话不会“看到”这个已安装的软件包。
对how to add a "high level" programmatic API for pip进行了很多讨论,这看起来很有希望。
答案 3 :(得分:3)
实际上,我认为,您可以使用{{1}},但不知道如何使用PIP进行此操作。
答案 4 :(得分:-1)
如果在Mac上,您应该可以这样做:
希望对您有帮助。