在python脚本中使用“pip install / uninstall”

时间:2012-10-17 15:11:43

标签: python pip

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

7 个答案:

答案 0 :(得分:11)

pip.main()在pip版本10及更高版本中不再起作用。您需要使用:

from pip._internal import main as pipmain

pipmain(['install', 'package-name'])

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

try:
    from pip import main as pipmain
except ImportError:
    from pip._internal import main as pipmain

答案 1 :(得分:8)

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

UI-Router

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

乔恩

答案 2 :(得分:6)

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

try:
   import ModuleName
except ImportError:
   print 'Error, Module ModuleName is required'

如果您坚持在脚本中使用pip安装软件包,则必须从call模块中查看subprocess(“os.system()”已弃用)。

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

答案 3 :(得分:3)

如果您<代理,您可以在代码中安装模块,如下所示...

import pip
pip.main(['install', '--proxy=user:password@proxy:port', 'packagename'])

答案 4 :(得分:1)

这是对this post的评论,不适用于分配给评论的空间。

请注意,安装包的用例可能出现在setup.py内部。例如,生成ply解析器表并将它们存储到磁盘。必须在 setuptools.setup运行之前生成这些表,因为必须将它们与正在安装的软件包一起复制到site_packages

确实存在setuptools.setup的{​​{3}},但安装软件包。

因此,安装程序包的安装过程所需的依赖关系不会以这种方式安装。

install_requires中放置此类依赖关系会setup_requires option。 即使它工作,也必须将一些函数传递给setuptools.setup,以便在setup_requires中安装依赖项和安装包本身之间运行。这种方法是嵌套的,因此针对not always work as expected

所以剩下的两个扁平方法是:

  1. 运行setup.py两次,自动(首选)或手动(通过通知用户表格在setuptools.setup之前无法构建。

  2. 首先调用pip(或其他一些等效的解决方案),以便安装所需的依赖项。然后继续构建表(或任何必要的安装前任务),并最后调用setuptools.setup

  3. 就个人而言,我更喜欢No.2,因为No.2可能会让用户在安装过程中观察控制台输出时感到困惑,除非他们已经知道两次调用setuptools.setup的意图。

    此外,安装时需要的任何权限(例如root,如果需要),当setup.py运行时(当时正是如此)肯定存在。所以setup.py可以被视为&#34;规范&#34;这种行为的用例。

答案 5 :(得分:1)

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

import os
os.system('pip install pygame')

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

答案 6 :(得分:0)

你可以在python脚本中运行pip:

import pip
pip.main(['install', 'packagename'])