使您的所有私人包在一个地方可以访问
使用此GitHub托管的PYPI指数
描述•尝试一下! •开始•修改索引软件包•常见问题•有关供应链攻击的单词•贡献•参考
该存储库是用作PYPI索引的GitHub页面,符合PEP503。
您可以使用它将所有软件包在一个地方分组,并通过pip轻松访问它,几乎就像其他任何包装一样!
虽然PYPI索引是公共的,但此处索引的私人软件包是私人的:您将需要GitHub身份验证才能检索它。
访问astariul.github.io/github-hosted-pypi/,然后尝试在此处安装索引的软件包!
尝试安装包装public-hello :
pip install public-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/它还将自动安装mydependency软件包!
尝试:
from public_hello import hi
print ( hi ())您也可以安装特定版本:
pip install public-hello==0.1 --extra-index-url https://astariul.github.io/github-hosted-pypi/现在尝试安装包装private-hello :
pip install private-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/它将行不通,因为它是私人的,只有我才能访问它!
Settings ,然后启用GitHub页面index.html和pkg_template.html<user>.github.io/<repo_name>查看您的PYPI索引现在,您的PYPI索引已设置,您可以注册 /更新 /删除软件包索引。
GitHub操作是为您自动进行的。
您只需要:
Actions选项卡register / update / delete )并手动触发它如您所知,如果在表单pip install git+<repo_link>中给出, pip可以安装GitHub托管软件包。该PYPI索引只是与其他GitHub存储库的链接的索引。
GitHub页面是公开的,因此该PYPI指数是公开的。但是它只包含指向其他GitHub存储库的链接,此PYPI索引上没有托管代码!
如果存储库托管代码是私有的,则需要使用GitHub进行身份验证以便能够克隆它,从而有效地将其私有化。
如果您更加专门了解供应链攻击,请检查有关它的部分!
运行pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/ ,以下情况发生:
pip将查看https://pypi.org/ ,默认,公共索引,试图找到带有指定名称的软件包。https://astariul.github.io/github-hosted-pypi/ 。pip ( git+<repo_link>@<tag> )。pip了解它是一个GitHub存储库,并将在本地克隆存储库(在特定标签上)。pip安装软件包。pip通过相同的步骤安装任何缺失的依赖关系。身份验证在克隆存储库时发生在步骤4。
唯一的最佳实践是使用GitHub版本。这允许您的软件包具有特定标签引用的版本。
为此:
pip install git+<repo_link>@<tag>安装软件包git+<repo_link>@<tag> )。 您可以为索引包指定其他名称。注册时只需在表格中给它一个不同的名称即可。
例如,如果您有一个名为tensorflow的私有软件包,则在此索引中注册它时,可以将其命名my_cool_tensorflow ,因此没有公共软件包tensorflow的名称collision。
然后,您可以使用pip install my_cool_tensorflow --extra-index-url https://astariul.github.io/github-hosted-pypi/ 。
然后从python ,您可以做:
import tensorflow但是要小心!虽然可以这样处理它,但最好为您的包装添加一个唯一的名称,以避免混乱,也可以解决安全!
构建Docker映像不是交互式的,因此没有提示输入用户名和密码。
取而代之的是,您应该将GitHub凭据放入.netrc文件中,因此pip从GitHub克隆时可以进行身份验证。
要在Docker上安全地执行此操作,您应该使用Docker Secrets。这是关于如何做的快速教程:
步骤1 :将您的凭据保存在秘密文件中。请按照此示例:
machine github.com
login <gh_user>
password <gh_pass>
n 。
因此,如果您使用的是用空格替换选项卡的IDE或您在Windows上的IDE(在线结尾为rn )!
让我们命名此文件gh_auth.txt 。
步骤2 :创建您的Docker文件。在Docker文件中,您应该将秘密文件安装在.netrc中,并在需要身份验证的地方运行命令。例如 :
# syntax=docker/dockerfile:experimental
FROM python:3
RUN --mount=type=secret,id=gh_auth,dst=/root/.netrc pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/步骤3 :构建您的Docker映像,指定步骤1中创建的秘密的位置:
sudo DOCKER_BUILDKIT=1 docker build --secret id=gh_auth,src=./gh_auth.txt .
如果您有任何疑问或想法来改善此常见问题解答,请打开PR /空白问题!
如您之前所看到的,该GitHub托管索引依赖于pip功能--extra-index-url 。由于此功能的工作原理,因此很容易受到供应链攻击的影响。
例如,假设您有一个名为fbi_package版本2.8.3的软件包,该软件包托管在您的私人PYPI索引上。
攻击者可以创建具有相同名称和更高版本的恶意软件包(例如99.0.0 )。
当您运行pip install fbi_package --extra-index-url my_pypi_index.com下,在Hood pip下,将下载最新版本的软件包,即恶意软件包!
虽然该存储库使拥有自己的PYPI索引非常方便,但请注意页面是公开的,因此任何人都可以看到您使用的包装名称,并创建一个具有相同名称的恶意软件包...
这就是为什么我们将自动支票纳入此私人PYPI索引的原因。每当您访问软件包的页面时,都会调用PYPI API,如果找到具有相同名称和更高版本的软件包,则将安装命令替换为警告。
您可以在https://astariul.github.io/github-hosted-pypi/transformers/上看到此类警告的演示。
如果您看到此警告,请不要安装软件包!相反,更改包装的名称或升级其公共对应方上方的版本。
在那里小心!
欢迎问题和公关!
如果您遇到任何奇怪的 /可以改善的怪异,请联系!
这个存储库极大地启发了这一点。
这只是一个光荣的版本,具有清洁页面和github操作,可轻松添加,更新和从索引中删除软件包。
还要检查原始作者的博客文章!
页面中使用的图标是由Flaticon的Freepik制作的