如何在没有镜像的情况下创建本地自己的pypi存储库索引

Lar*_*Cai 34 python pip pypi

我们有几个自己的python包,并希望使用简单的界面为他们创建本地pypi存储库,如https://pypi.python.org/simple/

由于安全原因,我想在没有任何镜像的情况下为本地创建此存储库,它将被置于apache的控制之下

命令pypimirror看起来必须初始化一次,需要镜像.

如何基于本地python包生成PyPi Simple Index.

还有其他任何简单的脚本吗?

小智 25

我们公司有类似的需求.基本上我们如何将"封闭源"包上传到索引,同时能够像在PyPI上一样安装它们?

我们赞助了一个名为devpi的项目,它充当PyPI缓存(您从PyPI访问的软件包将缓存在您的服务器上)以及强大而快速的索引服务器.该文档可从http://doc.devpi.net/latest/获得.

路线图上的下一步是镜像多地理部署.要在机器上踢轮胎大约需要5分钟(请查看快速入门指南).最后devpi兼容pip和easy_install(即你不需要在你的机器上安装devpi客户端).

希望这有帮助.

  • devpi正是我想要的.它充当pypi服务器,您可以使用默认的`pip`命令来管理包.易于设置且易于使用.要在虚拟环境中使用,可以在post(de)激活挂钩中启动/停止守护程序. (3认同)

K Z*_*K Z 21

既然你要求在这里回答:

看一看pip2pi,它似乎正是您正在寻找的.

  • 看起来`pip2pi`适用于已经在PyPI上的公共包,这是正确的吗?我认为最初的问题是关于为内部开发的包创建存储库. (3认同)
  • @Jim 好吧,PR 终于合并了,维护者又添加了另一个维护者,所以现在维护起来可能会更好。 (2认同)

Bur*_*lid 7

镜子没有什么特别之处,您可以mod_rewrite自己设置它.

  1. 将包转储到映射到URL的目录中.我在这里使用/url/to/my/pypi/一个例子.文件夹层次结构应该是/foo/bar/simple/[name of package]/[name of tarball]

  2. 将以下内容添加到.htaccess您打包的目录的全局配置中.最后一行是回归到全局pypi指数:

    Options +Indexes
    
    RewriteEngine On
    
    RewriteRule ^/robots.txt - [L]
    RewriteRule ^/icons/.* - [L]
    RewriteRule ^/index\..* - [L]
    
    RewriteCond /foo/bar/simple/ !-f
    RewriteCond /foo/bar/simple/ !-d
    RewriteRule ^/(.*)/?$ http://pypi.python.org/ [R,L]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更新您~/.pip/pip.conf的指向新存储库:

    [global]
    index-url = http://localhost/url/to/my/pypi/
    
    Run Code Online (Sandbox Code Playgroud)

    或者-i http://localhost/url/to/my/pypi/在命令行中使用该选项.


hoe*_*ing 6

最简单的方法是将distfiles包组织到名为dirs的包中,并运行一个简单的HTTP服务器。不需要额外的程序包,Python的stdlib就足够了。目录结构示例:

??? repodir
    ??? setuptools
    ?   ??? setuptools-38.1.0-py2.py3-none-any.whl 
    ?   ??? setuptools-38.1.0.zip
    ?   ??? setuptools-39.2.0-py2.py3-none-any.whl 
    ?   ??? setuptools-39.2.0.zip
    ??? wheel
    ?   ??? wheel-0.31.1-py2.py3-none-any.whl 
    ...
Run Code Online (Sandbox Code Playgroud)

启动服务器:

??? repodir
    ??? setuptools
    ?   ??? setuptools-38.1.0-py2.py3-none-any.whl 
    ?   ??? setuptools-38.1.0.zip
    ?   ??? setuptools-39.2.0-py2.py3-none-any.whl 
    ?   ??? setuptools-39.2.0.zip
    ??? wheel
    ?   ??? wheel-0.31.1-py2.py3-none-any.whl 
    ...
Run Code Online (Sandbox Code Playgroud)

本地存储库已启动并正在运行。现在,您可以将存储库传递给pip

$ pip install wheel --extra-index-url=http://127.0.0.1:9000
Run Code Online (Sandbox Code Playgroud)

甚至将repo URL保留在中pip.conf,以免每次都不输入它:

# pip.conf
[global]
extra-index-url=http://127.0.0.1:9000
Run Code Online (Sandbox Code Playgroud)

参考:《Python打包用户指南》,托管您自己的简单存储库