如何搭建自己的PyPI?

50

我希望创建一个内部的pypi服务器,用于组织内部的egg分发。

我找到了一些项目,例如:

据我所知,pypi.python.org使用名为Cheese Shop的软件。

我的问题:

  1. 为什么我不能使用Cheese Shop本身?(我找不到它,也不确定它是否存在)
  2. 其他人是如何解决这个问题的?(目前我们使用 svn 分发 eggs)

*编辑:这似乎是权威的 http://wiki.python.org/moin/PyPiImplementations。不过,我还是想听取反馈意见。


克隆的主要原因是pypi代码太糟糕了 :) - Jorge Vargas
我们尝试在构建脚本中汇集所有依赖项 @ Buildout crate.io - altipard
相关:https://dev59.com/kmMl5IYBdhLWcg3w3aPj - n611x007
9个回答

22

对于轻量级解决方案,请使用pypiserver


16

更新:现在PyPi由Warehouse提供支持,它是Cheese Shop的替代品。

可以从https://bitbucket.org/pypa/pypi/src下载Cheese Shop的源代码。此外,你链接的页面上还有一个示例,展示了如何将Apache用作“哑”Python包仓库:

# Mount pypi repositories into URI space
Alias /pypi   /var/pypi

# /pypi/dev: Redirect for unknown packages (fallback to pypi)
RewriteCond   /var/pypi/dev/$1 !-d
RewriteCond   /var/pypi/dev/$1 !-f
RewriteRule   ^/pypi/dev/([^/]+)/?$ http://pypi.python.org/pypi/$1/ [R,L]

RewriteCond   /var/pypi/dev/$1/$2 !-f
RewriteRule   ^/pypi/dev/([^/]+)/([^/]+)$ http://pypi.python.org/pypi/$1/$2 [R,L]

# /pypi/stable: Redirect for unknown packages (fallback to pypi)
RewriteCond   /var/pypi/stable/$1 !-d
RewriteCond   /var/pypi/stable/$1 !-f
RewriteRule   ^/pypi/stable/([^/]+)/?$ http://pypi.python.org/pypi/$1/ [R,L]

RewriteCond   /var/pypi/stable/$1/$2 !-f
RewriteRule   ^/pypi/stable/([^/]+)/([^/]+)$ http://pypi.python.org/pypi/$1/$2 [R,L]

2
经过调查所有可用的选项,我对它们都不满意。然而,Apache解决方案是最简单的,也是我最终使用的,尽管它远非理想。 - drue

9

Warehouse

如果你在2017年寻找最好的Python包仓库,那么Warehouse是你最佳选择。根据该项目的README所述:

Warehouse是下一代Python包仓库,旨在取代当前支持PyPI的传统代码库。

...

你可以使用dockerdocker-compose在本地运行Warehouse。请参阅文档中的入门指南了解如何设置。

它由Python包装部(PyPA)维护,他们与Python核心开发团队成员合作,并且有一个实时版本正在运行https://pypi.org/,它镜像了传统PyPI (https://pypi.python.org/)的所有内容。


4
我启动了一个小型的 EC2 实例,用作 pypi 服务器,拥有 15GB 的硬盘空间。但是 warehouse 所需的所有容器都无法适应该驱动器! - Marco Lavagnino

6

devpi

我们在企业环境中使用它,并且非常满意。它支持复制、私有索引和索引继承。


你们如何向devpi添加更多的包? - Ciasto piekarz
界面与pypi相同。您可以使用twine上传软件包。但是,在devpi服务器中需要启用一些访问设置。 - David

5

2

更新:crate.io已经关闭,该域名现在完全变成了其他内容。

还没有提到的一个项目是https://crate.io/,它似乎非常活跃。它声称是“下一代Python包索引”,但他们将其存储库很好地分成了几个部分,似乎欢迎您根据自己的目的进行定制和混合使用。


看起来crate.io域名现在已经被重新利用了? - Phil P
现在林已经挂了 :p - Mark
2
@Mark 我想我找到了 GitHub,至少是这个:https://github.com/crateio/crate.io。根据 Reddit 的说法,已被 Warehouse 取代。 - jpmc26
1
该项目不再处于活跃开发状态。 - astrojuanlu

1
如果您想要一个更轻量级的解决方案,而不是部署整个pypi服务器,您可以尝试使用由basketweaver生成的服务器索引。

1
需要注意的是,BasketWeaver对于轮子一无所知,并且它的最新版本发布于2009年! - sorin

-1

这个(有点老的)列表中还缺少一个:

djangopypi

基于Django,可能有点过头了,但我喜欢Django,如果它不能满足您的需求,修改它变得非常简单。


-1

而且创建源代码是可用的,尽管文档可以说是不存在的:

Crate.Web

这是一个Django应用程序,提供Python软件包索引。使用https://github.com/crateio中的其他几个软件包,因此您可能可以在没有Django的情况下推出自己的版本。

我特别考虑了一个静态版本,我一直认为应该有一种非常简单的方法,可以直接浏览一些[预配置的]存储库,并直接从我的github / bitbucket公共和私人存储库购买奶酪,只需运行一个简单的(gunicorn)进程即可。


抱歉,我刚才注意到@tilgovi的答案也涉及到Crate源代码库,而不仅仅是http://crate.io上的实时服务,尽管这是答案中链接的那个。 - Stefano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接