「Python」- 模块安装

  CREATED BY JENKINSBOT

问题描述

现代的高级语言,多数都具有扩展管理工具,以方便开发者安装扩展(插件、类库)。Python 也不例外,它也有自己的模块管理工具:pip

该笔记将记录:在 Python 中,如何使用 pip(1) 安装和管理 Python 模块,以及常见问题处理。

解决方案

第一步、安装 pip 命令

安装发行版自带版本(推荐):

apt-get install -y python2-pip

# 虽然版本较旧,但是经过发行版的完整测试,在当前系统中完全正常工作(几乎很少出问题)
# 如果需要新的版本(或模块),建议使用系统的 pip 创建虚拟环境,然后在虚拟环境中操作

安装最新版本:

# pip2 on Ubuntu 20.04 LTS
add-apt-repository universe && apt update && apt-get install -y python2

curl https://bootstrap.pypa.io/get-pip.py --output /tmp/get-pip.py
python2 /tmp/get-pip.py
pip2 --version

第二步、安装模块

pip install grpcio grpcio-tools

# 使用阿里云加速站点
pip install --index-url https://mirrors.aliyun.com/pypi/simple/ "<pkg-name>"

关于模块搜索:现在(05/31/2021)已经无法使用 pip search “<module name>” 命令进行模块搜索,相关解释参考 Remove the pip search command · Issue #5216 讨论。

修改 pip.conf 配置

# 方法一、通过命令行修改
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

# 方法二、或者,直接修改 ~/.pip/pip.conf 配置文件

修改 pip 配置,以使用阿里镜像站点,加快下载速度:

# 进行全局设置
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

# 只为特定安装包
pip install --index-url https://mirrors.aliyun.com/pypi/simple/ "<pkg-name>"

批量安装多个模块(requirements.txt)

通过 requirements.txt 文件,在其中保存需要安装的 Python 模块,然后批量安装:

cat > /tmp/requirements.txt <<EOF
prometheus-client==0.5.0
flask==1.0.3
psutil==5.6.6
grpcio==1.36.1
grpcio-tools==1.36.1
EOF

pip install -r /tmp/requirements.txt

在 requirements.txt 中,为特定模块,使用不同的安装选项:

pymongo==2.1.1 --install-option='--no_ext'

生成 requirements.txt 文件:

pip3 freeze > requirements.txt # Python3

常见错误处理

SyntaxError: invalid syntax

CENTOS/RHEL 6 PYTHON PIP ERROR, SYNTAXERROR: INVALID SYNTAX {STR(C.VERSION) FOR C IN ALL_CANDIDATES}

问题描述

# pip search supervisor
Traceback (most recent call last):
  File "/usr/bin/pip", line 7, in <module>
    from pip._internal.cli.main import main
  File "/usr/lib/python2.6/site-packages/pip/_internal/cli/main.py", line 10, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/lib/python2.6/site-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/lib/python2.6/site-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
    from pip._internal.cli import cmdoptions
  File "/usr/lib/python2.6/site-packages/pip/_internal/cli/cmdoptions.py", line 107
    binary_only = FormatControl(set(), {':all:'})
                                               ^
SyntaxError: invalid syntax

问题原因:you’ll need to version lock PIP when you upgrade it to 9.0.3. This is the last stable version of PIP that is compatible with Python 2.6

解决办法:我们先解决语法错误问题,使命令可用(否则执行 pip 将永远返回错误):

yum reinstall -y python-pip
pip install pip==9.0.3

在我们的场景中,我们需要安装 Supervisor 工具,由于 CentOS 6.5 已经自带,所以直接安装即可(yum install supervisor)。

由于 CentOS 6.5 没有提供 Python 2.7 版本,因此语法无法兼容,因此我们无法将 pip 升级到 9.0.3 版本之后。
也不建议强制安装 Python 2.7 版本,因为这可能会破坏 YUM 工具,或者其他软件。
如果需要使用其他版本,建议使用虚拟环境,或者可以考虑使用 Python 3.4 版本(存在于 CentOS 6.5 仓库中)。

InsecurePlatformWarning: A true SSLContext object is not available

SSL InsecurePlatform error when using Requests package
InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately

# pip install --upgrade pip
You are using pip version 7.1.0, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
Collecting pip
  Using cached https://files.pythonhosted.org/packages/43/84/23ed6a1796480a6f1a2d38f2802901d078266bda38388954d01d3f2e821d/pip-20.1.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 7.1.0
    Uninstalling pip-7.1.0:
      Successfully uninstalled pip-7.1.0
Successfully installed pip-20.1.1

error: invalid command ‘bdist_wheel’

Why is python setup.py saying invalid command ‘bdist_wheel’ on Travis CI? – Stack Overflow

pip install wheel
python setup.py bdist_wheel 

参考文献

How to Install Python Pip on Ubuntu 20.04 | Linuxize
Find default pip index-url – Stack Overflow
python – Updating the pip.conf file to use https – Stack Overflow
python – How to maintain pip install options in requirements file made by pip freeze? – Stack Overflow
python – Automatically create requirements.txt – Stack Overflow
Installing Packages — Python Packaging User Guide