如何在python脚本中使用pip安装软件包? 我不使用os.system,我想导入pip并使用它。
答案 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。
所以剩下的两个扁平方法是:
运行setup.py
两次,自动(首选)或手动(通过通知用户表格在setuptools.setup
之前无法构建。
首先调用pip
(或其他一些等效的解决方案),以便安装所需的依赖项。然后继续构建表(或任何必要的安装前任务),并最后调用setuptools.setup
。
就个人而言,我更喜欢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'])