pip 相关操作

国内源

linux下, 修改 ~/.pip/pip.conf. 内容如下:

1
2
3
[global]
trusted-host = mirrors.aliyun.com
index-url = https://mirrors.aliyun.com/pypi/simple

freeze

导出python安装包环境

1
pip freeze > requirements.txt

导入requirements文件

1
pip install -r requirements.txt

wheel

安装wheel

1
pip install wheel

使用

1
pip wheel -r requirements.txt

默认情况下, 上述命令会下载 requirements.txt 中每个包的 wheel 包到当前目录文件夹, 包括依赖的依赖.
现在你可以把这个 wheelhouse 文件夹打包到你的安装包中. 在你的安装脚本中执行:

1
pip install --use-wheel --no-index --find-links=/path/to/wheelhouse -r requirements.txt

就可以实现离线安装了. 当然, 还要考虑 pip 以及 wheel 自身的安装.

download

1
pip download  -r requirements.txt

老版本

1
pip install  --download  -r requirements.txt

离线库制作

  1. 安装pip2pi工具
    1
    $ pip install pip2pi


1
2
3
$ git clone https://github.com/wolever/pip2pi
$ cd pip2pi
$ python setup.py install

  1. 创建存放软件包的仓库

    1
    $ sudo mkdir /var/spool/pypi-mirror
  2. 下载软件包
    单个下载,比如:

    1
    $ pip2tgz /var/spool/pypi-mirror/ routes==1.12.3

批量下载,比如:

1
$ pip2tgz /var/spool/pypi-mirror/ -r requirements.txt

requirements.txt文件是一个待下载软件包列表,比如openstack需求的包列表。

  1. 建立索引:

    1
    $ dir2pi /var/spool/pypi-mirror/
  2. 更新版本
    若软件需求有更新,可以如下更新索引:

    1
    2
    $ pip2acmeco uliweb=0.2.6
    $ pip2acmeco -r list/requirements.txt
  3. 发布
    最后,将库地址配置给http服务就行了,方法同apt的类似,也可以采用自己的服务软件,比如nginx配置,这里介绍nginx的配置方法。
    给Nginx服务器添加虚拟主机配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    server {
    listen 80;
    server_name [hostname];
    root /var/spool/pypi-mirror;
    location /{
    autoindex on;
    autoindex_exact_size off; #显示文件的大小
    autoindex_localtime on; #显示文件时间
    #limit_rate_after 5m; #5分钟后下载速度限制为200k
    limit_rate 200k;
    }
    access_log logs/pypi.hostname.com.access.log main;
    }

当然也可以像apt源的部署方法一样,做一个软链接给apache2,或者配置apache

1
$ sudo ln -s /var/spool/pypi-mirror /var/www/html/pypi

error: 新版的pip可能出现识别”_”和”-“的问题, 可以手动修改dir2pi创建的xml解决。

问题处理

构建whl时可能缺少开发库报错

1
apt install python3 python-dev python3-dev build-essential libssl-dev libffi-dev libxml2-dev libxslt1-dev zlib1g-dev python-pip