跳转到主要内容

pip2pi从pip需求中构建一个与PyPI兼容的包仓库

项目描述

pip2pipip 需求中构建一个与PyPI兼容的包仓库

https://travis-ci.org/wolever/pip2pi.png?branch=master

PyPI可能会中断,包维护者可能会删除旧tar包,下载tar包可能需要很长时间。 pip2pi 通过使维护依赖软件的PyPI兼容仓库变得极其简单来帮助减轻这些问题。

$ pip2pi --help
Usage: pip2pi TARGET [PIP_OPTIONS] PACKAGES ...

Adds packages PACKAGES to PyPI-compatible package index at TARGET.

If TARGET contains ':' it will be treated as a remote path. The
package index will be built locally and rsync will be used to copy
it to the remote host.

PIP_OPTIONS can be any options accepted by `pip install -d`, like
`--index-url` or `--no-use-wheel`.

For example, to create a remote index:

    $ pip2pi example.com:/var/www/packages/ -r requirements.txt

To create a local index:

    $ pip2pi ~/Sites/packages/ foo==1.2

To pass arguments to pip:

    $ pip2pi ~/Sites/packages/ \
        --index-url https://example.com/simple \
        --no-use-wheel \
        -r requirements-base.txt \
        -r requirements-dev.txt \
        bar==3.1

需求

  1. pip

  2. 项目的 requirements.txt 文件(可选,但很有用)

  3. 一个HTTP服务器(可选,但很有用)

设置

安装 pip2pi

$ pip install pip2pi

然后创建一个目录,该目录将包含所需包的tar包,最好在您的Web服务器文档根目录下

$ mkdir /var/www/packages/

镜像包

要镜像一个包及其所有依赖项,请使用 pip2tgz

$ pip2tgz packages/ foo==1.2
...
$ ls packages/
foo-1.2.tar.gz
bar-0.8.tar.gz

请注意,pip2tgz 直接将包参数传递给 pip,因此可以使用 pip 识别的任何格式指定包

$ cat requirements.txt
foo==1.2
http://example.com/baz-0.3.tar.gz
$ pip2tgz packages/ -r requirements.txt bam-2.3/
...
$ ls packages/
foo-1.2.tar.gz
bar-0.8.tar.gz
baz-0.3.tar.gz
bam-2.3.tar.gz

构建包索引

一个包含大量 .tar.gz 文件的目录可以使用 dir2pi 命令转换为 PyPI 兼容的“简单”包索引

$ ls packages/
bar-0.8.tar.gz
baz-0.3.tar.gz
foo-1.2.tar.gz
$ dir2pi packages/
$ find packages/
packages/
packages/bar-0.8.tar.gz
packages/baz-0.3.tar.gz
packages/foo-1.2.tar.gz
packages/simple
packages/simple/bar
packages/simple/bar/bar-0.8.tar.gz
packages/simple/baz
packages/simple/baz/baz-0.3.tar.gz
packages/simple/foo
packages/simple/foo/foo-1.2.tar.gz

但这需要很多工作...

如果运行两个命令看起来工作量太大… 不要气馁!pip2pi 命令会为你运行这两个命令… 并且 它将使用 rsync 将新包和索引复制到远程主机!

$ pip2pi example.com:/var/www/packages/ foo==1.2
...
$ curl -I http://example.com/packages/simple/foo/foo-1.2.tar.gz | head -n1
HTTP/1.1 200 OK

但这仍然工作量太大...

不要气馁!你的 shell 的 alias 命令可以帮助你。将以下别名添加到 shell 的运行时配置文件中(提示:~/.bashrc 或类似)

alias pip2acmeco="pip2pi dev.acmeco.com:/var/www/packages/"

现在更新你的包索引将变得非常简单

$ pip2acmeco foo==1.2 -r bar/requirements.txt

使用您的新包索引

要使用新包索引,请将 --index-url= 参数传递给 pip

$ pip install --index-url=http://example.com/packages/simple/ foo

或者,一旦它被镜像,将你的 requirements.txt 文件前缀设置为 --index-url=...

$ cat requirements.txt
--index-url=http://example.com/packages/simple/
foo==1.2

无网络服务器

您也可以在离线状态下使用您的包索引

$ pip install --index-url=file:///var/www/packages/simple foo==1.2

一些提示

当通过 python setup.py installpython setup.py install 从源安装包时,您可能需要创建一个 setup.cfg 文件,该文件指向您的包索引。以下是 Windows、Linux 或 Mac 文件系统中离线包索引的一些示例

[easy_install]
# Windows
# index_url = file:///C:/pip2pi/simple/

# Linux
# index_url = file:///home/myusername/.pip2pi/simple/

# Mac
index_url = file:///Users/myusername/.pip2pi/simple/

注意 file: 后面的三重斜杠 /// - 两个用于协议,第三个用于本地文件系统的根。

关键词

  • 镜像 PyPI

  • 离线 PyPI

  • 创建离线 PyPI 镜像

项目详情


下载文件

下载您平台上的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。

源分布

pip2pi-0.8.2.tar.gz (10.4 kB 查看散列值)

上传时间

构建分布

pip2pi-0.8.2-py2.py3-none-any.whl (10.8 kB 查看散列值)

上传时间 Python 2 Python 3

由以下支持