gpt4 book ai didi

python - 如果我们想使用 S3 来托管 Python 包,我们如何告诉 pip 在哪里可以找到最新版本?

转载 作者:太空狗 更新时间:2023-10-29 21:10:50 24 4
gpt4 key购买 nike

我们正在尝试提出一个解决方案,让 AWS S3 托管和分发我们的 Python 包。

基本上我们想要做的是使用 python3 setup.py bdist_wheel 创建一个轮子。将其上传到 S3。然后任何服务器或任何机器都可以执行 pip install $http://path/on/s3。 (包括 AWS lambda 中的 virtualenv)(我们调查了 Pypicloud 并认为这是一种矫枉过正。)

从 S3 创建包和安装工作正常。这里只有一个问题:我们将发布新代码并给他们不同的版本。如果我们在 Pypi 上托管我们的代码,您可以通过调用 pip install package --upgrade 将一些包升级到最新版本。

但是如果你在 S3 上托管你的包,你如何让 pip 知道有更新的版本存在?你如何通过简单地给 pip 版本号来回滚到旧版本?有没有办法让 pip 知道在哪里寻找 S3 上不同版本的轮子?

最佳答案

AWS S3 可以用作 pypi 服务器,配置最少且没有其他附加依赖项。

假设您要使用存储桶 mypackages 来托管您的私有(private)包 - awesomepyrattlesnake

在 S3 中创建存储桶后,转到其属性,单击静态网站托管 卡并启用选项使用此存储桶托管网站。记下单选按钮上方提到的端 pip

以下是您必须如何安排文件夹和文件 (docs):

mypackages
|
|---awesomepy
| |---awesomepy-1.10.0-py27-none-any.whl
| |---awesomepy-1.10.3-py27-none-any.whl
| |---index.html
|
|---rattlepy
|---rattlesnake-0.1.1-py27-none-any.whl
|---index.html

包文件夹中的 index.html 文件将包含如下内容

<html>
<head>
<title>Links</title>
</head>
<body>
<h1>Links</h1>
<a href='awesomepy-1.10.0-py27-none-any.whl'>awesomepy-1.10.0-py27-none-any.whl </a>
<br />
<a href='awesomepy-1.10.3-py27-none-any.whl'>awesomepy-1.10.3-py27-none-any.whl </a>
</body>
</html>

Wheel 包必须遵循正确的命名约定。引用PEP 427了解详情。对于虚拟包 - awesomepy-1.10.3-py27-none-any.whl,我们假设,

  1. 语言实现是 Python 2.7 - py27
  2. ABI 标签没有 - none
  3. 平台是任何 - 任何

最后,您可以使用以下命令安装软件包。确保您的包的名称与 pypi 包的名称不同。一个简单的解决方案是在包名称前加上您公司的首字母缩写。

pip install awesomepy rattlesnake==0.1.1 --extra-index-url=<s3 Endpoint> --trusted-host=<s3 Endpoint without http>

使用 pip install awesomepy --upgrade 升级包也适用于此方法。

此外,修改您的存储桶权限以将包限制为目标客户。一种方法是:
在存储桶中选择权限选项卡 --> 编辑 Bucket Policy

原始信用:我的前经理 Adlon :)

关于python - 如果我们想使用 S3 来托管 Python 包,我们如何告诉 pip 在哪里可以找到最新版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36022867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com