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:passwd@]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)的更多相关文章

  1. 转: CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

    from: http://www.linuxde.net/2014/05/15576.html CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法 2014/05/ ...

  2. CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

    CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法如下: 截至包子写本文的时候,pip最新为 1.5.5 wget --no-check-certificate h ...

  3. linux软件管理之python包管理

    Python包管理 ====================================================================================python ...

  4. 【Python系列】Python包管理器pip

    缘起 这段时间忙着给朋友搞事,忙了好长一段时间,木有写博客很长时间了.之间做了两个东西,一个是邮件自动发送脚本,一个是数据处理软件.其中,在做数据处理软件的时候使用到了非Python系统库,是两个第三 ...

  5. Python包管理工具小结

    此文已由作者张耕源授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 作为一名接触Python有一段时间的初学者,越来越体会到Python的方便之处,它使人能更 多的关注业务本身 ...

  6. python 包管理工具 pip 的配置

    近几年来,python的包管理系统pip 越来越完善, 尤其是对于 windows场景下,pip大大改善了python的易用性. https://www.cnblogs.com/yvivid/p/pi ...

  7. python 包管理工具

    python 包管理工具 Python当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils,显得较为混乱. 而将来的工具链组合 ...

  8. Python 包管理工具解惑

    Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...

  9. python包管理-distutils,setuptools,pip,virtualenv等介绍

    python包管理-distutils,setuptools,pip,virtualenv等介绍 对于每个编程语言来说打包和发布开发包往往非常重要,而作为一个编程者能够快速容易的获得并应用这些由第三方 ...

随机推荐

  1. 关系型数据库 VS 非关系型数据库

    一.关系型数据库? 1.概念 关系型数据库是指采用了关系模型来组织数据的数据库.简单来说,关系模式就是二维表格模型. 主要代表:SQL Server,Oracle,Mysql,PostgreSQL. ...

  2. Go语言中Loop的注意点

    Go语言和其他语言不一样,它只有一种循环方式,就是for语句 可以参考如下公式: for initialisation; condition; post{ //Do Something } 执行顺序 ...

  3. OrCAD原理图中怎么导出FPGA的引脚分配

    流程 (1)选择tool下的export FPGA: (2)选择厂商,选择器件型号.选择生成文件类型. 以上.

  4. 数论ex

    数论ex 数学学得太差了补补知识点or复习 Miller-Rabin 和 Pollard Rho Miller-Rabin 前置知识: 费马小定理 \[ a^{p-1}\equiv 1\pmod p, ...

  5. 浅析Spring

    一:什么是Spring Spring是一个开源的框架,是为了解决企业应用程序开发复杂性由RodJohnson创建的.虽然Spring是为企业级应用推出的,但是所有的Java系统开发都可以使用Sprin ...

  6. codeforces-1133 (div3)

    A.先全部化成分钟数,取平均数之后化成正常时刻. #include <map> #include <set> #include <ctime> #include & ...

  7. spring boot集成FastDFS

    官方文档:https://github.com/happyfish100/fastdfs-client-java 一.首先,maven工程添加依赖 <!--fastdfs--> <d ...

  8. Angular4.x跨域请求

    Angular4.x请求 码云地址: https://gitee.com/ccsoftlucifer/Angular4Study 1. 搭建工程 新建一个工程angulardemo03 ng new ...

  9. 基于jdk1.8的ArrayList源码分析

    前言ArrayList作为一个常用的集合类,这次我们简单的根据源码来看看AarryList是如何使用的. ArrayList拥有的成员变量 public class ArrayList<E> ...

  10. 轻型Database- sqlite入门

    SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 是在世界上最广泛部署的 SQL 数据库引擎.SQLite 源代码不受版权限制. 下面跟着 ...