在python脚本中使用"pip install/uninstall"

Ber*_*ire 10 python pip

如何在python脚本中使用pip安装软件包?我不使用os.system,我想导入pip并使用它.

Dam*_*sak 17

pip.main()不再适用于pip版本10及更高版本.你需要使用:

from pip._internal import main as pipmain

pipmain(['install', 'package-name'])
Run Code Online (Sandbox Code Playgroud)

为了向后兼容,您可以使用:

try:
    from pip import main as pipmain
except ImportError:
    from pip._internal import main as pipmain
Run Code Online (Sandbox Code Playgroud)

  • 这是明确不支持的 https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program (6认同)
  • 重要提示:如果您从脚本中多次调用pip,或者首先从脚本中以这种方式调用pip,然后再以其他任何方式调用它(我个人使用过“ flit”),则此操作会“崩溃”。这是因为pip会将os.environ ['PIP_REQ_TRACKER']`设置为一个临时目录名,该目录名随后会被删除,但不会清除环境。因此,最好使用`os.system`或任何其他可用方法在子进程中调用pip。 (5认同)
  • 名称“_internal”的确切原因是明确指示您不应该在这样的脚本中使用 pip。请参阅上面的 @Samizdis 回复以获得正确的指南。 (5认同)

Jon*_*Jon 8

我认为这些答案已经过时了.事实上你可以这样做:

import pip
failed = pip.main(["install", nameOfPackage])
Run Code Online (Sandbox Code Playgroud)

并在传递给main()的列表中插入任何其他args.它返回0(失败)或1(成功)

乔恩

  • 现在过时了 (2认同)

小智 5

在python脚本中安装软件包并不是一个好主意,因为它需要root权限.您应该在创建脚本的同时发送其他模块,或检查模块是否已安装:

try:
   import ModuleName
except ImportError:
   print 'Error, Module ModuleName is required'
Run Code Online (Sandbox Code Playgroud)

如果您坚持在脚本中使用pip安装软件包,则必须callsubprocess模块中查看(" os.system()不推荐使用").

没有pip模块,但你可以使用上面的方法轻松创建一个.

  • 如果在virtualenv中使用pip怎么办?它仍然可能没有root权限不是吗? (9认同)
  • 我想要做某事,例如:import pip; pip.install('package_name') (3认同)
  • 过时的答案。请参阅其他答案。 (2认同)
  • 通过 `subprocess` 使用 pip 是推荐的方法 https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program (2认同)

小智 5

我使用 os.system 来模拟安装 pip 模块的终端,(我知道 os.system 已弃用,但它仍然有效,而且也是最简单的方法),EG 我正在制作一个游戏引擎,它有多个全部使用 Pygame 的 python 脚本,在启动文件中,如果用户系统没有 pygame,我使用此代码将 pygame 安装到用户系统上:

import os
os.system('pip install pygame')
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果他们没有 pip,我不知道如何安装它,所以这个脚本依赖于 pip。