pip.main安装失败,其中包含'模块'对象没有属性' main'

时间:2018-04-17 05:36:12

标签: python python-2.7 pip

我正在尝试从python脚本中安装一些python包,我正在使用pip.main(install)。以下是代码段

try:
    import requests
except:
    import pip
    pip.main(['install', '-q', 'requests==2.0.1','PyYAML==3.11'])
    import requests

我尝试过从pip._internal导入main并使用pipmain而不是pip.main(),但它没有帮助。

我在pip version 9.0.1python 2.7

5 个答案:

答案 0 :(得分:4)

pip开发人员不建议在程序中调用pip。 并且pip.main()方法已从pip v10中删除。 作为替代方法,建议在子进程中执行pip。

https://pip.pypa.io/en/stable/user_guide/?highlight=_internal#using-pip-from-your-program

try:
    import requests
except:
    import sys
    import subprocess
    subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'requests==2.0.1', 'PyYAML==3.11'])
    import requests

答案 1 :(得分:2)

我遇到了同样的问题,只是运行下面的命令解决了它:

easy_install pip

答案 2 :(得分:0)

简短的回答是不要这样做。使用setup.py或直接导入语句。

Here is why this doesn't work with pip and how to get around it if necessary.

pip会影响整个环境。他们可能会或可能不想在他们运行您的脚本的环境中安装requests,这取决于运行此版本的原因和原因。运行脚本会影响其python环境,这可能是一个令人讨厌的惊喜。

将其作为包安装(使用python setup.pypip install)是另一回事。有一些完善的方法可以使用requirements.txtsetup.py安装其他软件包。预计安装包将安装其依赖项。 You can read more in the python.org packaging tutorials

如果您的脚本有依赖关系但人们不需要安装它,您应该在README.rst和/或requirements.txt中告诉他们。 只需包含import语句,当他们收到错误时,他们就会知道该怎么做。让他们控制哪个环境安装哪个包。

答案 3 :(得分:0)

pip.main函数已移动,但pip开发人员未删除。这里投票最高的解决方案不好。当您可以直接运行python代码时,从python-> shell-> python并不是一个好习惯。尝试from pip._internal import main,然后您就可以像以前一样使用该主要功能来执行pip调用。

答案 4 :(得分:0)

如果需要,您可以定义一个函数来安装lib。很方便。

#%%
# IMPORTS

import pip

def import_or_install(package):
    try:
        __import__(package)
    except:
        import sys
        import subprocess
        subprocess.check_call([sys.executable, '-m', 'pip', 'install', package])
        __import__(package)

import_or_install("numpy")
import_or_install("matplotlib")

import numpy as np
import matplotlib.pyplot as plt


#%%
# Your code

print("Hello")