在python空闲时运行pip

时间:2016-01-25 09:58:04

标签: python pip python-idle

我对运行pip感到好奇。 每次我在Windows中的命令shell中运行pip

c:\python27\script>pip install numpy

但是,我想知道我是否可以在python空闲时运行它。

import pip
pip.install("numpy")

不幸的是,它没有用。

5 个答案:

答案 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_linepip之后命令行的一部分。

去年九月(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上,您应该可以这样做:

  1. 转到您的IDLE。
  2. 运行帮助(“模块”)。
  3. 找到HTML模块。
  4. 运行帮助(“ HTML”)
  5. 应该弹出一个文件映射,例如this / file / map / example/。
  6. 转到查找器,然后执行command + shift + g并将文件映射粘贴到此处。请删除最后一个文件,因为那样您将转到模块文件。
  7. 有所有模块。如果要添加模块,请下载模块文件并将其放在此处。

希望对您有帮助。