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配置PyPI1、创建目录和文件
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配置PyPI1、创建目录和文件
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配置PyPI1 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_packagesfrom 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=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. 安装PyPI1、打包镜像
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.pemdocker 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. 使用PyPI5.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