Hyu*_*Kim 8 python pip python-idle
我对运行pip感到好奇.每次我在这样的窗口中运行命令shell中的pip
c:\python27\script>pip install numpy
Run Code Online (Sandbox Code Playgroud)
但是,我想知道我是否可以在python空闲时运行它.
import pip
pip.install("numpy")
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有用.
仍然无法发表评论,所以我添加了另一个答案。Pip 过去有几个入口点。并且不建议直接或在进程内调用 pip(如果您仍然想这样做,建议使用“runpy” ):
import sys
import runpy
sys.argv=["pip", "install", "packagename"]
runpy.run_module("pip", run_name="__main__")
Run Code Online (Sandbox Code Playgroud)
但这也应该有效:
try:
from pip._internal import main as _pip_main
except ImportError:
from pip import main as _pip_main
_pip_main(["install", "packagename"])
Run Code Online (Sandbox Code Playgroud)
这个问题是或者应该是关于如何从 python 程序运行 pip。IDLE 与此版本的问题没有直接关系。
扩展 JJ 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 用于在一个进程中运行多个命令时,缓存后给出的命令可能会使用陈旧且不再正确的缓存。例如,listafterinstall显示了 install 之前的情况。
想要检查 pip 输出的程序的第二个问题是它转到 stdout 和 stderr。我发布了一个程序,将这些流捕获到程序变量中,作为运行 pip 的一部分。
正如 L_Pav 所建议的那样,对每个 pip 命令使用子进程调用,虽然效率较低,但可以解决这两个问题。该communicate方法使输出流可用。请参阅子流程文档。
| 归档时间: |
|
| 查看次数: |
25004 次 |
| 最近记录: |