把Github用作Pypi Server
Posted 赖勇浩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把Github用作Pypi Server相关的知识,希望对你有一定的参考价值。
因为觉得有参考价值,一直打开许多页面没有关闭,浏览器的 tab 都差不多上百了,决心把一些有意义的内容通过翻译、摘录和重编的形式把核心内容快速统一到博客上来,方便后续检索,也好关掉一些浏览器窗口。
本文是 How to use GitHub as a PyPi server的翻译、摘录和重编,原作者cedd burge,我加入了一些pip
配置和网页源码之类的内容,让它更加顺畅和完整。
首先是有很多私有 Pypi Server 方案,但需要自己架设,cedd哥不想干这事,只想白嫖,最后他成功了,本文就是他的方案。
首先,pip
是可以从Git
里安装程序包的,比如cedd哥在github托管了一个python_world
的项目,这个项目的代码结构是符合Python包规范的,那么就可以通过以下命令把这个包安装到电脑:
pip install git+https://github.com/ceddlyburge/python_world#egg=python_world
因为这个项目是开源(公开)的,谁都可以读取,所以这个没有问题。
除此之外,setuptools
也可以从git
安装setup.py
里声明的依赖包,比如cedd哥在github上托管一个叫python_hello
的包,它需要刚才说的python_world
包才能运行,那么可以在它的setup.py
里通过install_requires
声明依赖,这个声明也是兼容从git
安装的:
install_requires=[
'python_world@git+https://github.com/ceddlyburge/python_world#egg=python_world-0.0.1',
]
所以当你用下面这句命令安装python_hello
的时候,它不仅会从github下载自己,还会下载python_world
,一并装上:
pip install git+https://github.com/ceddlyburge/python_hello#egg=python_hello
但如果一直写这么长的命令,就让人很烦了,那么其实可以把这个依赖写入到requirements.txt
中,然后每次只需要执行pip install -r requirements.txt
即可,省去了许多细节。
但是,如果我们想要用最常见的pip install python_hello
来安装,那么就还需要一个Pypi Server,它提供由Pep 503
定义的Pypi索引规范。其实这个索引很简单,手工都可以撸出来,cedd哥就撸了一个,通过github pages站点提供服务,就是这个啦,打开可以看到有个python_world
的超链接,链接到项目页面,这个页面只有一个带版本号的链接,指向git
安装地址。页面的关键元素如下:
<a href="git+https://github.com/ceddlyburge/python_world#egg=python_world-0.0.1" data-requires-python=">=3.6.0">python_world-0.0.1</a>
这个站点的源代码在这里,确实是非常简单的。有了 Pypi Server 之后,就可以使用下面这个命令来安装了:
pip install python_hello --extra-index-url https://ceddlyburge.github.io/python-package-server/
这个时候,你只需要在pip
的配置文件(~/.pip/pip.conf
)中把--extra-index-url https://ceddlyburge.github.io/python-package-server/
参数隐藏起来,就可以用简短的pip install python_hello
安装了。
结论就是使用云托管的git
作为 Pypi Server是可行的,对,不仅仅是 github,其它git
托管厂商也可以的,国内的也可以,有pages服务的尤其好,另外就是私有仓库也是支持的,就是拉取代码的时候,需要输入账号密码(如有)或者需要提前配置好SSH证书。
以上是关于把Github用作Pypi Server的主要内容,如果未能解决你的问题,请参考以下文章