【问题标题】:How to fix pip being proken after installing line_profiler?安装 line_profiler 后如何修复 pip 被破坏的问题?
【发布时间】:2017-06-09 07:58:33
【问题描述】:

使用 Ubuntu 14.04.5 LTS。尝试使用sudo pip3 install line_profiler 安装line_profiler,现在当我运行sudo pip3 时,我得到以下输出:

Traceback (most recent call last):
  File "/usr/bin/pip3", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/local/lib/python3.4/dist-packages/pkg_resources/__init__.py", line 72, in <module>
    import packaging.requirements
  File "/usr/local/lib/python3.4/dist-packages/packaging/requirements.py", line 59, in <module>
    MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker")
TypeError: __call__() missing 1 required positional argument: 'name'

当我现在尝试运行 django 应用程序时遇到类似的错误,所以我猜很多东西都搞砸了。

有人知道可能出了什么问题或如何解决吗?

【问题讨论】:

  • 我不确定是什么原因造成的,但一个想法是从/usr/local/lib/python3.4/dist-packages 中删除本地安装的包(或将它们移开),然后重试。
  • 我通常建议不要在 Linux 发行版上通过 sudo pipsudo pip3 安装。 Linux 发行版的优势在于发行版包管理器(适用于 Ubuntu 的 APT)为您管理软件和更新,如果您自己启动 sudo pip(或 sudo make install 等),您将失去很多。相反,我建议坚持使用发行版提供的 Python 包或使用 virtualenv 来安装你需要的东西。这样,如果 virtualenv 搞砸了,停用并删除它并重新开始是很简单的。

标签: python linux pip


【解决方案1】:

在安装了几个软件包后,我刚刚在相对较新的 Ubuntu 14.04 配置上遇到了同样的错误。我猜有问题的代码已经被推送到存储库了。

查看异常的根本原因:

  File "/usr/local/lib/python3.4/dist-packages/packaging/requirements.py", line 59, in <module>
    MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker")
TypeError: __call__() missing 1 required positional argument: 'name'

问题是MARKER_EXPR() 调用应该有一个'name' 参数,但它没有。我的解决方法是编辑requirements.py 文件,使其包含MARKER_EXPR("")。这为我解决了。

【讨论】:

  • 也为我修复了它,只需将 MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") 更改为 MARKER_EXPR = originalTextFor(MARKER_EXPR(""))("marker")
【解决方案2】:

我自己遇到了这个问题,并将其报告为打包中的错误,但维护者explained 认为这是由于 pyparsing 的过时版本造成的。升级到 pyparsing>=2.0.2 应该可以修复错误。

【讨论】:

  • 下载pyparsing sources,进入src目录运行python setup.py install
  • 我没有解决它
【解决方案3】:

只要sudo pip uninstall pyparsing,然后sudo pip install pyparsing,那么一切都会好起来的。

【讨论】:

  • 我从 Ubuntu Trusty 上的 update-manager 收到此错误。我能够sudo -H pip3 install pyparsing --upgrade 获得一个没有抛出 TypeError 的新版本。
【解决方案4】:

接受的答案对我有用。但是,正如另一个答案中所述,pyparsing 需要更新。在 requirements.py 中添加引号后,我能够升级 pyparsing。然后我删除了我的编辑,pip 继续正常运行。

【讨论】:

    【解决方案5】:

    类似的问题(line-profiler 破坏了 pip),但 different error

    通过删除一些本地安装的包(回退到操作系统提供的默认值)然后更新解决(感谢 Josh 的评论):

    sudo rm -rf /usr/local/lib/python3.4/dist-packages/setuptools*
    sudo rm -rf /usr/local/lib/python3.4/dist-packages/pkg_resources
    sudo pip3 install --upgrade pip
    

    警告:此命令将在不询问的情况下删除文件。 YMMV 所以先备份这些文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多