为了账号安全,请及时绑定邮箱和手机立即绑定

如何从需要它的脚本中安装缺少的python包?

如何从需要它的脚本中安装缺少的python包?

哔哔one 2021-04-01 09:33:33
假设您已经在python发行版上安装了pip或easy_install,我想知道如何从脚本本身在用户目录中安装所需的软件包。据我所知pip也是一个python模块,因此解决方案应如下所示:try:    import zumbaexcept ImportError:    import pip    # ... do "pip install --user zumba" or throw exception   <-- how?    import zumba我所缺少的是从python内部执行“ pip install --user zumba”,我不想使用它,os.system()因为这可能会导致其他问题。我认为有可能...
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

已更新为更新的点子版本(> = 10.0):


try:

    import zumba

except ImportError:

    from pip._internal import main as pip

    pip(['install', '--user', 'zumba'])

    import zumba

感谢@Joop,我得以提出正确的答案。


try:

    import zumba

except ImportError:

    import pip

    pip.main(['install', '--user', 'zumba'])

    import zumba

重要的一点是,这将不需要root访问权限,因为它将模块安装在用户目录中。


不知道它是否适用于二进制模块或需要编译的模块,但显然适用于纯Python模块。


现在,您可以编写自包含脚本,而不必担心依赖关系。


查看完整回答
反对 回复 2021-04-05
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

从pip版本> = 10.0.0开始,由于内部软件包的重组,上述解决方案将不起作用。现在,在脚本中使用pip的新方法如下:


try: import abc

except ImportError:

    from pip._internal import main as pip

    pip(['install', '--user', 'abc'])

    import abc


查看完整回答
反对 回复 2021-04-05
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

我想指出,当前接受的答案可能会导致应用名称冲突。从应用程序名称空间导入无法全面了解系统上已安装的内容。


更好的方法是:


import pip


packages = [package.project_name for package in pip.get_installed_distributions()]


if 'package' not in packages:

    pip.main(['install', 'package'])


查看完整回答
反对 回复 2021-04-05
  • 3 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号