我想通了。我使用了一个名为 pip2pi 的包。这个包有一个叫做 dir2pi 的命令。我创建了一个包含 tar.gz 文件的目录。每个 tar.gz 文件都是使用 this layout 创建的 Python 包。为了识别版本,我添加了一个连字符,然后使用语义版本控制。
目录如下所示:
C:\packages\package_a-1.0.8.tar.gz
C:\packages\package_a-1.1.0.tar.gz
C:\packages\package_b-2.0.0.tar.gz
C:\packages\package_c-1.0.5.tar.gz
然后我跑了,dir2pi C:\packages -S。这创建了必要的 HTML 文件和文件夹布局。在文件夹的根目录下,创建了一个名为 simple 的文件夹。 simple 这个名字似乎是 PEP 503 的东西。在 simple 内部,文件夹结构如下所示:
C:\packages\simple\index.html
C:\packages\simple\package_a
C:\packages\simple\package_a\index.html
C:\packages\simple\package_a\package_a-1.0.8.tar.gz
C:\packages\simple\package_a\package_a-1.1.1.tar.gz
C:\packages\simple\package_b
C:\packages\simple\package_b\index.html
C:\packages\simple\package_b\package_b-2.0.0.tar.gz
C:\packages\simple\package_c
C:\packages\simple\package_c\index.html
C:\packages\simple\package_c\package_c-1.0.5.tar.gz
这显然是符合 pip 的文件/文件夹布局。
每个 index.html 文件都包含指向其相邻文件和文件夹的链接。例如,C:\packages\simple\index.html 如下所示:
<html><head><title>Simple Index</title><meta name='api-version' value='2' /></head><body>
<a href='package_a/'>package_a</a><br />
<a href='package_b/'>package_b</a><br />
<a href='package_c/'>package_c</a><br />
</body></html>
C:\packages\simple\package_a\index.html 看起来像这样:
<a href='package_a-1.0.8.tar.gz'>package_a-1.0.8.tar.gz</a><br />
<a href='package_a-1.1.1.tar.gz'>package_a-1.1.1.tar.gz</a><br />
现在有了正确的 HTML 文件和文件夹结构,我告诉 pip 在 C:\packages\simple 文件夹中查找包。我通过编辑 pip.ini 文件(位置因系统而异)并添加以下行来做到这一点:
[global]
extra-index-url = file:///c:/packages/simple
或者,我也可以将此文件夹作为参数传递给 pip,如下所示:
pip install --index-url=file:///c:/packages/simple package_a==1.1.1