大道至简,知行合一。

使用私有的PyPI仓库源突破网络限制

通常我们使用pip安装Python包,默认从官方PyPI仓库下载,而很多公司存在网络隔离环境(无法访问外网),在安装Python扩展包时往往需要从PyPI下载源码解压安装,但是有的时候甚至需要自建包(并不上传官方PyPI,内部使用),这时候就需要搭建私有源来解决。

Python官方提供了PyPI私有源搭建的解决方案说明,主要有以下几种:

当然官方文档也介绍了使用镜像/代理、工具/扩展等方法解决的介绍,但是我们今天只介绍搭建私有源。如上面介绍的多个解决方案,比较主流的是pypiserver,原因在于其轻量易用。

一 使用pypiserver搭建PyPI私有源

pip install pypiserver    #安装pypiserver
mkdir ~/packages        #创建离线包存储文件夹
pypi-server -p 8080 ~/pacakges    #在8080端口启动服务

在浏览器验证 http://localhost:8080:

查看”http://localhost:8080/packages/

尝试查找某个特定Python库,如simples:

如果需要在连接的时候添加用户名和密码验证,可以使用 htpasswd 和 passlib。

pip install htpasswd
pip install passlib
htpasswd -sc .htpaswd user  #创建存放密码的文件,user为自建的用户名
pypi-server -p 8080 -P ~/.htpasswd ~/packages #重新开启pypiserver服务器

这只是稍作展示,具体使用可要比这个复杂,主要原因是这个服务依赖于我们维护PyPI的离线包,否则就无法下载安装。常见的也是官方推荐的解决方案是使用 bandersnatch,它会定期更新抓取官方镜像。

二 客户端配置和工具包上传

这时候客户端需要更新“~/.pypirc”配置,填写正确的地址(假设为1.1.1.1)和账号密码。以下为内容展示,建议不要在文件中出现注释信息。

# vim ~/.pypirc ,没有需要创建
[distutils]
index-servers = 
pypi    #官方PyPI源信息
pypitest  #官方测试PyPI源信息
local    #私有源服务器名称
 
[pypi]
repository: https://pypi.python.org/pypi 
username:{{your_username}} 
password:{{your_password}} 
 
[pypitest]
repository: https://testpypi.python.org/pypi 
username:{{your_username}} 
password:{{your_password}} 

[local]
repository: http://1.1.1.1:8080   #开启服务的ip和端口
username: username
password: passwd

有了这些配置,在上传工具包时可以指定到私有源。上传工具包仍然是使用setup.py的register/upload命令,在使用这两个命令是会去“~/.pypirc”配置文件中查找PyPI的配置。你可以通过提供参数指明使用的源是官方的还是私有的,如发布到私有源local中:

python setup.py register -r local
python setup.py sdist upload -r local

二 为pip配置指定PyPI源

上面我们介绍了搭建私有源和打包工具包上传私有源的方法,这里我们讲一下如何为pip配置指定的PyPI源来获取安装包。在日常开发中,我们经常遇到网络卡顿造成安装一个Python扩展包耗时很久的情况,或者我们已经有了一个私有PyPI源如何使用的问题,这时候就需要为pip配置PyPI源啦。

方法很简单,修改pip的配置文件”~/.pip/pip.conf”,没有需要创建,然后修改配置:

[global]
index-url=http://xxx.com/simple
#extra-index-url=https://xxx.com/simple
#如果必要的话
[install]
trusted-host=xxx.com   

如果不想要配置,可以在pip命令中直接指定(只适合临时使用):

pip install -i http://xxx.com/simple --trusted-host 1.1.1.1 Django

如果公司也没有网络隔离场景也没有内部PyPI源,你个人也无意搭建一个,这时候可以使用国内开源的PyPI源。

  • 阿里云 http://mirrors.aliyun.com/pypi/simple/
  • 中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/
  • 豆瓣(douban) http://pypi.douban.com/simple/
  • 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
赞(0)
未经允许不得转载:北凉柿子 » 使用私有的PyPI仓库源突破网络限制
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址