【问题标题】:pip prints trash messages in stdoutpip 在标准输出中打印垃圾消息
【发布时间】:2017-03-14 08:37:25
【问题描述】:

当我尝试使用 pip 命令时,标准输出中会出现烦人的消息:

~# pip -V
Platform: linu
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)

~# pip install
Platform: linu
You must give at least one requirement to install (see "pip help install")

Python 命令运行正常。

操作系统 - Ubuntu 14.04

我尝试重新安装 pip 和所有依赖项,但没有帮助。

那是什么,它来自哪里?

当我尝试对 AWS 使用 ec2.py 动态清单脚本时,发现了这个问题。我遇到了和这里一样的问题: https://github.com/ansible/ansible/issues/14667

ec2.py 生成以“Platform: linu”开头的 JSON,因此 ansible 无法使用它。 我还搜索了 boto 库(在 ec2.py 中使用)和 pip 配置。但它们是空白的。

有什么建议吗?


Python

~# python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.name
posix
>>> import platform
>>> platform.system()
'Linux'

找到了另一种重现问题的方法:

:/usr/bin# python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import os
>>> import boto
Platform: linu
>>>

【问题讨论】:

  • 可能是系统配置问题 - 检查uname -a
  • 没有。没关系~# uname -a Linux ip---- 3.13.0-68-generic #111-Ubuntu SMP Fri Nov 6 18:17:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
  • 对于我来说,python 从系统获取此信息,但我目前无法访问我的 linux 来检查它。
  • 顺便说一句:你有很老的pip。最新的是8.1.2,您可以使用pip install --upgrade pip 或更短的pip install -U pip 安装它。有用于 Ubuntu 的最新 Python 的非官方存储库 Python 2, Python 3
  • 是新安装的pip。具有相同错误的旧版本是 8.1.2 版本。没有区别。

标签: python linux amazon-ec2 pip boto


【解决方案1】:

这是常见的错误。大多数这种奇怪的问题都会发生(无论是在普通 PC、VM 还是在 EC2 等云实例中。您是否注意到 AWS EC2 使用不同的锁定 pip 版本)是在 sudo 模式下运行 Python。

不要在 sudo 模式下运行 PIP!

我的建议:setup Virtualenv 并在该 virtualenv 上安装您的软件包。然后使用mkvirtualenv yourenv 创建一个自定义的virtualenv。 要使用指定的 virtualenv 自动加载 python 脚本,你只需要在你的 bash 脚本中添加一个额外的行来触发你的 python 包/模块。

source <virtualenv_folder>/<virtualenv_name>/bin/activate

【讨论】: