一个计算机技术爱好者与学习者

0%

Python软件仓库PyPI

1. PyPI简介

The Python Package Index, abbreviated as PyPI (/ˌpaɪpiˈaɪ/) and also known as the Cheese Shop, is the official third-party software repository for Python.

PyPI是Python软件仓库,我们执行pip install时就是从PyPI仓库中拉取的软件包。

参考文档:

2. 替换国内PyPI仓库

国内使用python下载包,经常会遇到下载不了的情况,这时可以替换PyPI仓库。

目前国内靠谱的 pip 镜像源有:
清华:https://pypi.tuna.tsinghua.edu.cn/simple/
阿里:https://mirrors.aliyun.com/pypi/simple/
豆瓣:https://pypi.douban.com/simple/

参考文档:pypi 镜像使用帮助

2.1. 临时使用

比如更新tensorflow,可以使用

1
2
pip install tensorflow --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tensorflow --upgrade --trusted-host -i https://pypi.tuna.tsinghua.edu.cn/simple

两者的差别,在于使用的协议是http还是https。在最新的pip版本(>=7)中,使用镜像源时,会提示源地址不受信任或不安全。

2.2. Windows配置PyPI

1、创建目录和文件

1
2
%appdata%\pip\pip.ini
# c:\user\username\pip\pip.ini

2、pip.ini内容为:

1
2
3
4
5
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/

[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn/simple/

2.3. Linux配置PyPI

1、创建目录和文件

1
vi ~/.pip/pip.conf

2、pip.conf内容为:

1
2
3
4
5
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/

[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn/simple/

2.4. Anaconda配置PyPI

1
2
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

虽然修改了软件源,但是pip search命令还是不能使用的,因为搜索软件使用的协议与安装软件不同。pip search基于xmlrpclib实现,pip install基于urllib2实现。

3. 打包Python软件包

3.1. 打包wheel包

1、准备python项目

1
2
3
4
.
├── example
│   └── main.py
└── setup.py

其中main.py内容为:

1
2
if __name__ == '__main__':
print("hello")

2、准备setup.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from setuptools import find_packages
from setuptools import setup

setup(
name="example",
version="1.0.1",
author="voidking",
author_email="voidking@qq.com",
description="desc",
long_description="long desc",
license='Apache2.0',
# packages=['example'] # python项目文件夹的名字
packages=find_packages()
)

3、执行打包

1
2
3
pip install setuptools
pip install wheel
python setup.py bdist_wheel

3.2. 测试wheel包

1
2
pip install dist/example-1.0.1-py3-none-any.whl
python -m example.main

4. 安装配置PyPI

参考文档:

4.1. 准备配置文件

准备配置文件:

  • config.yaml:devpi的配置文件
  • Dockerfile:用于打包devpi-server的镜像
  • devpi-ldap.yaml:devpi支持ldap的配置

完整配置文件参考hexo-storage/python-pypi

4.2. 安装PyPI

1、打包镜像

1
docker build -t voidking/devpi-server:v1.0 .

2、master节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mkdir -p /opt/pypi/data/
mkdir -p /opt/pypi/certs/
openssl genrsa -out /opt/pypi/certs/key.pem 2048
chmod 600 /opt/pypi/certs/key.pem

docker run --rm \
-v /opt/pypi/data:/app/data \
-v /opt/pypi/certs/key.pem:/app/certs/key.pem \
-p 3141:3141 \
voidking/devpi-server:v1.0 \
devpi-init --configfile config.yaml \
--role master

docker run -it --name devpi-master -d \
--restart=always \
-v /opt/pypi/data:/app/data \
-v /opt/pypi/certs/key.pem:/app/certs/key.pem \
-p 3141:3141 \
voidking/devpi-server:v1.0 \
devpi-server \
--configfile config.yaml \
--ldap-config devpi-ldap.yaml \
--gitlab-registry-url https://gitlab.voidking.com \
--role master \
--secretfile /app/certs/key.pem \
--port=3141

3、worker节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
docker run -it --rm \
-v /opt/pypi/data:/app/data \
-v /opt/pypi/certs/key.pem:/app/certs/key.pem \
-p 3141:3141 \
voidking/devpi-server:v1.0 \
devpi-init \
--configfile config.yaml \
--role replica \
--master=http://192.168.56.101:3141

docker run -it --name devpi-worker1 -d \
--restart=always \
-v /opt/pypi/data:/app/data \
-v /opt/pypi/certs/key.pem:/app/certs/key.pem \
-p 3141:3141 \
voidking/devpi-server:v1.0 \
devpi-server \
--configfile config.yaml \
--role replica \
--master=http://192.168.56.101:3141 \
--secretfile /app/certs/key.pem \
--port=3141

5. 使用PyPI

5.1. 登录PyPI仓库

1
2
3
4
5
6
7
pip install devpi-client
devpi use http://localhost:3141
devpi login root --password=''
devpi passwd # 修改密码
devpi user -m root password=newpasswd # 修改密码方法二
devpi login root --password=newpasswd
devpi logoff

5.2. 设置镜像仓库

1
devpi index root/pypi mirror_url="https://pypi.douban.com/simple"

当本地PyPI仓库中不存在某个包时,从镜像仓库中拉取。

5.3. 创建索引

1
2
devpi index -c dev bases=root/pypi
devpi use root/dev

5.4. 上传PyPI包

1
2
3
4
devpi login root --password=newpasswd
devpi use root/dev

devpi upload --wheel

想要带文档上传的话,参考文档Sphinx配置conf.py文件

1
2
pip install sphinx
devpi upload --wheel --with-docs

5.5. 删除PyPI包

1
2
devpi remove example
devpi remove example>=1.0.1

5.6. 推送包到另外的索引

devpi push 命令是将包从一个索引推送到另外一个索引,例如将包example推送到root/dev

1
devpi push example==1.0.1 root/dev
  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-python-pypi/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~