我们有几个自己的 python 包,并希望使用简单的界面为它们创建本地 pypi 存储库,例如https://pypi.python.org/simple/
由于安全原因,我只想为本地创建这个存储库,没有任何镜像,它将置于 apache 的控制之下
命令pypimirror
looks必须初始化一次,这需要镜像。
如何根据本地 python 包生成 PyPi 简单索引。
还有其他简单的脚本吗?
我们有几个自己的 python 包,并希望使用简单的界面为它们创建本地 pypi 存储库,例如https://pypi.python.org/simple/
由于安全原因,我只想为本地创建这个存储库,没有任何镜像,它将置于 apache 的控制之下
命令pypimirror
looks必须初始化一次,这需要镜像。
如何根据本地 python 包生成 PyPi 简单索引。
还有其他简单的脚本吗?
我们公司也有类似的需求。基本上,我们如何将“封闭源”包上传到索引,同时能够像在 PyPI 上一样安装它们?
我们赞助了一个名为devpi的项目,它充当 PyPI 缓存(您从 PyPI 访问的包将缓存在您的服务器上)以及一个强大而快速的索引服务器。该文档可在http://doc.devpi.net/latest/ 获得。
路线图上的下一步是镜像多地理部署。在机器上踢轮胎大约需要 5 分钟(查看快速入门指南)。最后,devpi 与 pip 和 easy_install 兼容(即您不需要在您的机器上安装 devpi 客户端)。
希望这有帮助。
既然你要求在这里回答:
看看pip2pi
,它似乎正是您要寻找的。
最简单的方法是将包 distfiles 组织到包命名的目录中并运行一个简单的 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
...
启动服务器:
$ cd repodir/
$ python3 -m http.server 9000
$ # or for Python 2:
$ python2 -m SimpleHTTPServer 9000
本地存储库已启动并正在运行。现在您可以将 repo 传递给pip
:
$ pip install wheel --extra-index-url=http://127.0.0.1:9000
甚至将 repo URL 保存在pip.conf
不每次都输入它:
# pip.conf
[global]
extra-index-url=http://127.0.0.1:9000
镜子没有什么特别之处,可以mod_rewrite
自己设置。
将您的包转储到映射到 URL 的目录中。这里我使用/url/to/my/pypi/
一个例子。文件夹层次结构应该是/foo/bar/simple/[name of package]/[name of tarball]
将以下内容添加到.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]
更新你~/.pip/pip.conf
的指向新的存储库:
[global]
index-url = http://localhost/url/to/my/pypi/
或者-i http://localhost/url/to/my/pypi/
在命令行中使用该选项。
如果您正在谈论运行 simplepypi,那么您将拥有用于添加软件包并提供服务的服务器。引用文档:
- Running this on the setup.py of your favorite package: python setup.py sdist upload -r local
如果您要使用os.walk
或glob.glob
在本地站点包目录中使用,您可以快速过滤setup.py
每个包/目录并在它们上调用上述内容。
如果您只需要创建一个包含 .html 列表的 tar.gz 文件目录,那么您可以在站点包目录的顶层使用 glob.glob - tar.gz 每个目录依次添加并添加结果文件名到列表 - 然后您可以从该列表生成您的 index.html。
您可以为此使用大量模板引擎中的任何一个,也可以自己生成它:
import glob
filelist = glob.glob("*.tar.gz")
tags = ['<A href="file:Where/%s">%s</A>' % (s,s) for s in tags]
head = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
<META NAME="Generator" CONTENT="Python Script">
<META NAME="Keywords" CONTENT="Cheeseshop">
<META NAME="Description" CONTENT="List of local python packages">
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?">
"""
tail = """</BODY></HTML>"""
tags.insert(0,head)
tags.append(tail)
page = "\n".join(tags)
然后保存或为您提供页面。