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)的主要内容,如果未能解决你的问题,请参考以下文章