美文网首页编程语言
Pycharm 升级pip后无法使用问题分析

Pycharm 升级pip后无法使用问题分析

作者: dongye_3377 | 来源:发表于2019-12-05 15:37 被阅读0次

by dongye

Pycharm 或其他带有包管理功能的python IDE在升级 pip 19.3.1 后 安装package可能会出现如下错误

Traceback (most recent call last):
  File "D:\Program Files\JetBrains\PyCharm Community Edition 2017.3.3\helpers\packaging_tool.py", line 217, in main
    retcode = do_install(pkgs)
  File "D:\Program Files\JetBrains\PyCharm Community Edition 2017.3.3\helpers\packaging_tool.py", line 131, in do_install
    return main(['install'] + pkgs)
TypeError: 'module' object is not callable

解决办法:

打开 Pycharm 安装目录下 helpers\packaging_tool.py 文件(或其他IDE相应报错文件)
找到报错函数do_installdo_uninstall

def do_install(pkgs):
    try:
        try:
            from pip._internal import main
        except Exception:
            from pip import main
    except ImportError:
        error_no_pip()
    return main(['install'] + pkgs)


def do_uninstall(pkgs):
    try:
        try:
            from pip._internal import main
        except Exception:
            from pip import main
    except ImportError:
        error_no_pip()
    return main(['uninstall', '-y'] + pkgs)

# Fix Error module 'pip' has no attribute 'main'

或更早版本会报module 'pip' has no attribute 'main'的代码

def do_install(pkgs):
    try:
        import pip
    except ImportError:
         error_no_pip()
     return pip.main(['install'] + pkgs)


def do_uninstall(pkgs):
    try:
        import pip
    except ImportError:
        error_no_pip()
    return pip.main(['uninstall', '-y'] + pkgs)

from pip._internal import main 改为 from pip._internal.main import main

也可直接复制下段代码进行替换

def do_install(pkgs):
    # author: Dongye<dongye_bio@qq.com>
    try:
        try:
            from pip._internal.main import main
        except Exception:
            from pip import main
    except ImportError:
        error_no_pip()
    return main(['install'] + pkgs)


def do_uninstall(pkgs):
    try:
        try:
            from pip._internal.main import main
        except Exception:
            from pip import main
    except ImportError:
        error_no_pip()
    return main(['uninstall', '-y'] + pkgs)

原因分析:

pip 10 版本时变更了目录结构
在pip 10.x.x 中将main方法从pip\__init__.py#209移动到
pip\_internal\__init__.py#53

...
# Hide the InsecureRequestWarning from urllib3
warnings.filterwarnings("ignore", category=InsecureRequestWarning)


def main(args=None):
    if args is None:
        args = sys.argv[1:]

    # Configure our deprecation warnings to be sent through loggers
    deprecation.install_warning_logger()

...

因此在 9.x.x 过渡到 10.x.x 时会报 module 'pip' has no attribute 'main'错误

而在pip 19.3.1中又将main方法移动到pip\_internal\main.py#22

此时from pip._internal import mainmain 是“包”而不是“方法”,因此报错'module' object is not callable, 将其修改为from pip._internal.main import main即可正常工作

附:Pycharm安装pip失败问题

在Pycharm中使用virtualenv创建环境,pip默认会是较低版本,使用图形化工具无法进行升级,替换方法在Terminal中使用
python -m pip install --upgrade -i https://pypi.douban.com/simple pip
进行安装,命令需要执行两次

相关文章

网友评论

    本文标题:Pycharm 升级pip后无法使用问题分析

    本文链接:https://www.haomeiwen.com/subject/yrndgctx.html