Python 包管理(PYPA)

Posted halberd-lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 包管理(PYPA)相关的知识,希望对你有一定的参考价值。

Python包的管理可以通过Python 自带的管理 工具,例如:package-autoremove,package-list-packages, package-install 等,使用起来也非常方便。但是有些包是没有的。

而PyPA 推荐使用的是pip 来管理 Python 包。Pip 就像CentOS / RHEL 中的yum 一样。可以很方便的对Python 包进行管理。可以去pip 查找自己感兴趣的程序,或者做为贡献者提供Projects.

3.1 PyPA

PyPA (Python Packaging Authority) 是一个管理Python 相关包方面的各项工程的工作组。
他们把这些工程放在Github 或者 bitbucket 上。通过pypa-dev  distutils-sig 讨论相关问题。

PyPA 推荐使用pip 进行Python 包管理。

通过以下命令来安装Pip。

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

更多内容,请查看在 PYPI 查找pip,然后在相关的文档中查看更多内容。

pip参数说明:

# pip --help

Usage:
  pip <command> [options]

Commands:
  install                     安装包.
  uninstall                   卸载包.
  freeze                      按着一定格式输出已安装包列表
  list                        列出已安装包.
  show                        显示包详细信息.
  search                      搜索包,类似yum里的search.
  wheel                       Build wheels from your requirements.
  zip                         不推荐. Zip individual packages.
  unzip                       不推荐. Unzip individual packages.
  bundle                      不推荐. Create pybundles.
  help                        当前帮助.

General Options:
  -h, --help                  显示帮助.
  -v, --verbose               更多的输出,最多可以使用3次
  -V, --version               现实版本信息然后退出.
  -q, --quiet                 最少的输出.
  --log-file <path>           覆盖的方式记录verbose错误日志,默认文件:/root/.pip/pip.log
  --log <path>                不覆盖记录verbose输出的日志.
  --proxy <proxy>             Specify a proxy in the form [user:[email protected]]proxy.server:port.
  --timeout <sec>             连接超时时间 (默认15秒).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
  --cert <path>               证书.

3.2 本地化PyPA

有些时候,在一些环境中,网络连接受到限制,不能连接外网。而这时,我们又需要安装Python的各种包。 自行定制pip 源是最好的方式。

主要操作包括:安装pip2pi 工具和nginx. 然后创建仓库,索引,修改nginx 和Pip 的配置。

本文的示例,全部以服务器不可连接公共网络为前提。

3.2.1 安装pip3

在页面 https://pypi.org/project/pip/#files 上下载Pip 的安装文件.这里没有使用whl包。 在正式安装pip3 之前,还要安装另外一个依赖包:setuptools。

  • setuptools

    下载setuptools:
    下面页面为:https://pypi.org/project/setuptools/#files 
    以root用户解压安装:

    unzip setuptools-xx.x.x.zip
    cd setuptools-xx.x.x/
    python3 setup.py build
    python3 setup.py install
    
  • 安装pip3 将pip-XX.X.tar.gz 上传至服务器。然后解压安装:

    tar -xzvf pip-xx.x.tar.gz
    cd pip-xx.x/
    python3 setup.py install
    

3.2.2 安装pip2pi

  • 无外网连接 到github 下载pip2pi,下载的文件名应为:pip2pi-master.zip ,将此文件上传到内网服务器,并解压, 得到路径<path>/pip2pi 。 执行如下命令进行安装:

    cd pip2pi
    python3 setup.py install
    
  • 有外网连接

    git clone https://github.com/wolever/pip2pi.git
    cd pip2pi
    python3 setup.py install
    

3.2.3 安装nginx

其实安装tomcat 也可以的。主要用于提供网络服务。
在安装nginx 之前,需要先安装pcre 以开启http_rewrite_module,如果不打开此功能,也可不下载pcre. 下面页面为:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

nginx 官网下载地址. 选择稳定版本下载。然后上传至服务器。然后解压安装。

示例如下:

# 如果服务器可以连接外网,使用如下命令下载
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-x.xx.zip
wget http://nginx.org/download/nginx-x.xx.x.tar.gz
# pcre 可安装,也可以不安装,下面是安装命令
unzip pcre-x.xx.zip
cd pcre-x.xx/
./configure
make && make install
# 下面是安装nginx命令
tar -xzvf ./nginx-x.xx.x.tar.gz
cd nginx-x.xx.x.tar.gz

./configure --with-pcre=../pcre-x.xx/ --prefix=<安装路径> --with-openssl=/usr/lib64/
make && make install

3.2.4 配置nginx

安装路径下conf路径,配置文件(nginx.conf)存放在此路径中. 主要需要配置的内容是server{} 部分。

  • 创建路径 安装nginx时,指定了安装路径"~/nginx". 在此路径中创建我们的web主路径:

    cd ~/nginx
    mkdir -p pypi.self.cn
    
  • 配置nginx参数

    server {
         listen       9080;   # 默认80端口,root用户才能启用1024以下的端口号。如果是非root用户启动会报
         server_name  pypi.self.cn;
         charset      utf8  # 字符集配置
         #charset koi8-r;
    
         #access_log  logs/host.access.log  main;
    
         location / {
             root   pypi.self.cn;        # 此为相对路径,写相对路径时,默认是在安装路径下查找。
                                         # 相应的路径也必须存在。
             autoindex on;
             autoindex_exact_size off; #显示文件的大小
             autoindex_localtime on; #显示文件时间
             #limit_rate_after 5m; #5分钟后下载速度限制为200k
             limit_rate 200k;
             index  index.html index.htm;
         }
    

    到现在,我们私有的pip 源已经配置好了。下一步需要做的,就是把我们需要的包及其依赖包下载并上传到 pypi.self.cn 这个路径中去。

    • 注意事项:: nginx默认监听80端口,root用户才能启用1024以下的端口号。如果是非root用户启动会报 nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

3.2.5 下载模块及依赖包

下载模块时pip2tgz 会将依赖的包一起下载。示例如下:

pip2tgz ~/nginx/pypi.self.cn/ docx==0.2.4
Collecting docx==0.2.4
  File was already downloaded /home/.halberd/nginx/pypi.self.cn/docx-0.2.4.tar.gz
Collecting lxml (from docx==0.2.4)
  File was already downloaded /home/.halberd/nginx/pypi.self.cn/lxml-4.2.5-cp37-cp37m-manylinux1_x86_64.whl
Collecting Pillow>=2.0 (from docx==0.2.4)
  File was already downloaded /home/.halberd/nginx/pypi.self.cn/Pillow-5.3.0-cp37-cp37m-manylinux1_x86_64.whl
Successfully downloaded docx lxml Pillow
You are using pip version 10.0.1, however version 18.1 is available.
You should consider upgrading via the ‘pip install --upgrade pip‘ command.

Done. 0 new archives currently saved in ‘/home//nginx/pypi.self.cn/‘.

$ll
-rw-r--r-- 1 halberd root   54925 Nov 16 18:20 docx-0.2.4.tar.gz
-rw-r--r-- 1 halberd root 5842531 Nov 16 18:20 lxml-4.2.5-cp37-cp37m-manylinux1_x86_64.whl
-rw-r--r-- 1 halberd root 1976365 Nov 16 18:20 Pillow-5.3.0-cp37-cp37m-manylinux1_x86_64.whl
  • 下载单个模块

    pip2tgz <文件存放路径> <模块名>==<版本号>
    
  • 下载多个模块 下载多个模块时,需要将模块信息写入到文本文件中,pip2tgz通过读取该文本文件逐一下载。

    pip2tgz <文件存放路径> -r <文件名>
    

    文件示例:

    cat modulelist.txt
    docx==0.2.4
    wheel==0.32.2
    cx_Oracle==7.0.0
    PyMongo==3.7.2
    psycopg2==2.7.6.1
    

    命令示例:

    pip2pi ./ -r ../modulelist.txt
    

3.2.6 上传作为源的依赖包

这些上传的依赖包,要从其他地方先用pip2tgz 下载好,不然,无法解决依赖关系。
所有相关的包,要上传到pypi.self.cn 这个路径中。因为这个路径是我们配置的nginx 访问的根路径。包括simple 文件夹一起上传。

3.2.7 建立索引文件

如果用其他方式将包下载,是没有simple 文件夹的,这个文件夹里保存着索引文件,这时 可以使用dir2pi命令,手动建立索引:

dir2pi ~/nginx/pypi.self.cn/

3.2.8 验证可用性

这里我们尝试使用私有源安装wheel 软件包。安装时注意使用root用户进行安装。

# pip install wheel -i http://10.1.194.23:9080/simple/ --trusted-host 10.1.194.23
Looking in indexes: http://10.1.194.23:9080/simple/
Collecting wheel
  Downloading http://10.1.194.23:9080/simple/wheel/wheel-0.32.2-py2.py3-none-any.whl
Installing collected packages: wheel
Successfully installed wheel-0.32.2

3.2.9 如何使用私有源

  • 指定私有源的方法:

    pip install -i wheel
    或者
    pip install --index-url=http://pypi.self.cn/simple wheel
    
  • 配置私有源为默认 在linux下创建~/.pip/pip.conf文件. 
    如果是windows环境,创建:%HOMEPATH%\pip\pip.ini.
    文件内容如下

    [global]
    index-url = http://10.1.194.23:9080/simple
    [install]
    trusted-host = 10.1.194.23
    

    这配置配置以后,就可以直接使用pip install 进行安装了。

以上是关于Python 包管理(PYPA)的主要内容,如果未能解决你的问题,请参考以下文章

python包管理器--pip

CentOS安装python包安装管理工具pip

安装python包管理工具pip

Python包管理工具pip的基本使用

Python包管理工具pip的安装和使用

pip安装 mac