F Z*_*Zhu 9 python pip amazon-s3
我们正在努力想出一个让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在哪里寻找不同版本的车轮?
Shi*_*iva 14
AWS S3 可以用作 pypi 服务器,配置最少,没有其他附加依赖项。
假设您想使用存储桶mypackages来托管您的私有包 -awesomepy和rattlesnake.
在 S3 中创建存储桶后,转到其属性,单击静态网站托管卡并启用选项Use this bucket to host a website。记下单选按钮上面提到的端点。
以下是您必须如何安排文件夹和文件:
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
Run Code Online (Sandbox Code Playgroud)
该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>
Run Code Online (Sandbox Code Playgroud)
Wheel 包必须遵循正确的命名规则。有关详细信息,请参阅PEP 427。对于虚拟包 - awesomepy-1.10.3-py27-none-any.whl,我们假设,
py27noneany最后,您可以使用以下命令安装软件包。确保您的包的名称与 pypi 包的名称不同。用您的公司首字母前缀包名称是一种简单的解决方案。
pip install awesomepy rattlesnake==0.1.1 --extra-index-url=<s3 Endpoint> --trusted-host=<s3 Endpoint without http>
Run Code Online (Sandbox Code Playgroud)
使用pip install awesomepy --upgrade这种方法升级包也适用。
此外,修改您的存储桶权限以将包限制为目标客户。一种方法是:在存储桶中
选择权限选项卡 --> 编辑存储桶策略
原始信用:我的前经理 Adlon :)
无耻插件:我遇到了完全相同的问题,并且对任何现有的解决方案都不满意,所以我写了一个小的 Lmabda/Terraform 组合来解决这个问题:https: //github.com/berislavlopac/plambdapi
希望能帮助到你!