python包管理pip,基于docker搭建pypi私有库 、上传和使用

PYPI Server是经常用于搭建内网或私有pypi私有库的python包。并且使用搭建和配置也比较简单。

官方仓库是https://github.com/mosquito/pypi-server/ 中可以进行查看安装和使用不做赘述。

下面主要分享基于docker的安装和一些坑。

docker hub 查看镜像 https://hub.docker.com/r/pypiserver/pypiserver

首先拉取镜像(默认已安装docker,未安装的可以自行搜索)docker pull pypiserver/pypiserver

第二步需要新建一个用来保存私有库包文件的文件夹(除非你需要一次性的私有仓库,否则你需要永久保存这些包)。我这里默认创建了一个

/data/pypi/packages的文件夹路径。创建完成之后,就可以运行docker容器了。执行一下命令

docker run --name 'pypi' --restart always -v /data/pypi/packages:/data/packages -p 8080:8080 -d pypiserver/pypiserver -P . -a . packages

--name 代表容器名称,--restart always 是防止意外造成仓库无法使用而自动重启。-v /data/pypi/packages:/data/packages挂在卷,冒号前是自己本地创建的文件夹路径,冒号后面是固定的容器内挂载路径。具体可以查看dockerhub中的Dockerfile文件。 -p 8080:8080 是暴露端口,确保冒号前的端口本机未被使用即可。-d 代表以后台的方式允许。后面接上镜像名称之后就可以启动了。

部署之后,我们可以上传python包了。如果对于python构建方法不理解的可以,查看相关文档。https://setuptools.readthedocs.io。这里推荐一个有其他作者分享的操作方法。https://cloud.tencent.com/developer/article/1351316 。当我们包写完之后,就可以推送到自己搭的私有仓库了。有两个方式指定推送的地址。第一种修改setup的上传python包配置文件~/.pypirc配置文件。

 index-servers =

   pypi

   test-pypi

   #官方PyPI源信息[pypi]

   repository: https://pypi.python.org/pypi 

   username:{{your_username}}

   password:{{your_password}}

   #自己搭建的PyPI源信息[test-pypi]

   repository:http://127.0.0.1:8080/ 

   username:{{your_username}}

   password:{{your_password}}

其中pypi是官方地址。

此时你是没有私有仓库没账号密码的。我们缺省账号密码,进行尝试。

直接上传python包会发现,要求输入密码,跳过会提示没有权限。这时候我们需要制定密码文件,或者修改其为不需要密码上传。如果非必须,建议可以使用无密码验证上传。

首先先介绍有密码的仓库。同样是允许镜像,首先,我们需要创建“.htpasswd”文件,格式为“用户名:密码”:【注:window下可能无法直接创建,可以用过文本创建并写入下面代码后,通过另存为”.htpasswd”,注意需要带双引号的。】

user1:123456

文件名.htpasswd

并把上方~/.pypirc文件中的用户名密码修改为:

  username:user1

   password:123456

之后删除之前的镜像,重新创建带密码的镜像。

其命令修改为:

docker run --name 'pypi' --restart always -v /data/pypi/packages:/data/packages  -v  .htpasswd:/data/.htpasswd  -p 8080:8080 -d pypiserver/pypiserver -P  .htpasswd packages

这里不同的是多了一个-P,此参数用于指定密码文件,详情了解可以查询官方仓库说明。最后的packages是指定文件夹名称,这个和Dockerfile有关,固定命令不需要修改和理解。

twine upload -r test-pypi dist/*

之后输入账号密码即可

如果你不想~/.pypirc文件,因为你不不需要频繁上传,或者你大部分时间是上传pypi官方仓库的。你可以在twine的时候指定网址。我们尝试执行

twine upload --repository-url http://127.0.01:8080 dist/*

同样输入账号密码即可。

但是如果你是私用的仓库,并且不需要做相关上传的权限控制,可以尝试不带密码的仓库创建。同样先删除有密码的镜像。将容器创建命令修改为:

docker run --name 'pypi' --restart always -v /data/pypi/packages:/data/packages  -v .htpasswd:/data/.htpasswd  -p 8080:8080 -d pypiserver/pypiserver -P .  -a . packages

这里的参数有些不同 -P . -a . 参数值变成了. 第一个.表示不指定密码文件,第二个表示,任何用户不进行权限验证。

这样我们直接执行

twine upload --repository-url http://127.0.01:8080 dist/* 

跳过账号密码,即可上传。

接下来是比较重要的,如果你是用官方直接构建好的镜像,那么此刻还是会上传不成功。会提示上传500错误(500: Internal Server Error" Package upload appears to have failed)。

此时如果登录docker容器内查看,会查看到原因大体是,文件夹没有权限。此时需要登入到容器内部去修改文件夹权限。注意这里不能用普通用户登入容器内部修改文件夹权限,因为会提示权限不足以修改文件夹权限,所以索性用root方式登录。执行下面命令

docker exec -it --user root pypi /bin/sh

其中--user root 标识使用root登录。登录容器之后,直接修改文件夹权限即可chmod 777 -R packages 当然是在/data路径下执行。修改之后退出再次尝试上传。这时候会发现我们上传成功了。之后在使用pip下载包的时候我们直接指定地址

pip install -i http:127.0.0.1:8080/simple/  xx(包) --trusted-host 127.0.0.1:8080

即可安装成功。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351