https://www.python.org/dev/peps/pep-0503 https://pip.pypa.io/en/stable/reference/pip_wheel/#cmdoption-i 暗示能够从本地目录安装python包,但目前还不清楚这在实践中是什么样子的。
我是否在本地目录中使用相同的索引.html文件?对于本地目录,--extra-index-url 的参数是什么样的?
如果你有一个要按 pip 搜索的发行版目录,你可以简单地包含该目录的路径:
pip install --extra-index-url=file:///path/to/wheelhouse somepackage
/path/to/wheelhouse
的结构应像简单的存储库一样,请参阅PEP 503 – 简单存储库 API。没有必要运行网络服务器,从文件系统提供服务是可以的。发布的本地目录(例如.tar.gz
和.whl
文件(可以通过运行piprepo build /path/to/wheelhouse
转换为正确的存储库结构。
如果您根本不希望搜索远程 PyPI,则可以使用--index-url
而不是--extra-index-url
。 请注意,也可以在requirements.txt
文件的顶部添加--extra-index-url
和/或--index-url
。
使用pip
,您还可以直接从本地文件安装发行版。 例如,要安装 copyingmock 发行版:
$ curl https://pypi.python.org/packages/d9/26/5ae8945356634c87cdf099bd7cee57799df46798af90ae5ccb03961c6359/copyingmock-0.1-py2.py3-none-any.whl > copyingmock-0.1-py2.py3-none-any.whl
$ pip install ./copyingmock-0.1-py2.py3-none-any.whl
我已经展示了一个二进制发行版的示例,但同样适用于源代码发行版 (.tar.gz(。
假设您要从本地安装2个软件包:abc-xyz
和foo
,并且您有相应的软件包文件abc-xzy-1.2.3.tar.gz
和foo-1.0.0.tar.gz
。
我们会将您的本地 pypi 目录放在/my_local_pypi/simple
您的目录结构将如下所示:
/my_local_pypi/simple
index.html
- abc-xyz/
index.html
abc-xyz-1.2.3.tar.gz
- foo/
index.html
foo-1.0.0.tar.gz
根index.html
需要为每个包<a href></a>
定位条目,因此应如下所示:
$ cat /my_local_pypi/simple/index.html
<!DOCTYPE html><html><body>
<a href="abc-xyz">abc-xyz></a></br>
<a href="foo">foo</a></br>
</body></html>
然后,每个$package/index.html
都需要一个指向实际包文件的<a href></a>
锚点,因此它们应如下所示:
$ cat /my_local_pypi/simple/abc-xyz/index.html
<!DOCTYPE html><html><body>
<a href="abc-xyz-1.2.3.tar.gz">abc-xyz-1.2.3.tar.gz</a></br>
</body></html>
$ cat /my_local_pypi/simple/foo/index.html
<!DOCTYPE html><html><body>
<a href="foo-1.0.0.tar.gz">foo-1.0.0.tar.gz</a></br>
</body></html>
然后在您的requirements.txt
中,您可以执行以下操作:
$ cat requirements.txt
--extra-index-url file:///my_local_pypi/simple/
abc-xyz==1.2.3
foo==1.0.0
然后你应该很高兴:pip install -r requirements.txt
另请参阅 piprepo 项目,它在生成所需的本地目录结构方面做得很好。
您不必使用任何index.html
文件。
运行以下命令就足够了:
pip install "path/to/file.whl"
这将从本地轮文件安装。