在应用程序启动时自动更新python egons。

transmute的Python项目详细描述


在应用程序启动时自动更新python egons——或者,你知道, 无论何时,真的。

概述

这个模块背后的思想是支持自更新python 应用程序,即命令行工具。远程变速探头 更新组件的存储库,获取更新并将其添加到 sys.path,使它们可在应用程序中使用。

组件被假定为标准的python鸡蛋。存储库是 这些鸡蛋的简单容器。目前,pypi和s3“文件夹”是 作为存储库支持。(主要用于测试目的,本地 目录也支持作为存储库)。

在引擎盖下,pkg_resources(来自setuptools)用于解析 并根据获得的可用鸡蛋列表满足要求 从每个存储库。一旦更新包可用,它们的 可以导入模块,也可以使用 调整环境以获取更新的模块。

应用程序编写器控制要更新的包、存储库 每个包都将从中获取,并且在执行更新时。

其哲学是,一个不存在的或不稳定的网络不应该 防止(或显著延迟)应用程序在 过时的包(如果它们已在本地缓存)。也就是说,有 目前没有测试和验证成功更新或 正在回滚失败的更新。

示例

这是一个脚本,它请求从 当前工作目录中的dist文件夹:

importtransmutetransmute.require(['hello'],sources=['dist'])transmute.update()importhellohello.greet('world')

使用bootstrap.py

引导应用程序

中的子模块 `transmute/bootstrap.py<;https://github.com/comoyo/python-transmute/blob/master/transmute/bootstrap.py>;。`_ 可以单独用于引导其他python模块和 应用。它能够从pypi下载包。在这个 方法,transmute本身可以加载并进一步用于下载 附加包装。

该脚本提供了一组钩子,用户可以在其中放置代码。 尤其是,可以填写main()来获取特定于应用程序的 打包并实际启动应用程序。在这一点上它被称为 transmute已添加到sys.path(下载自 如果需要的话。

defmain():importtransmuteimporttransmute.s3transmute.require(['foobar'],sources=['s3://foobar-repository/eggs/foobar'])transmute.update()importfoobar.clireturnfoobar.cli.run()

它还可以用作python模块的占位符。如果模块 本身可以从pypi获得,相应的包名将是 添加到requirements变量。对于其他用例,我感觉到 拉取请求来了:-)

在撰写本文时, 脚本是来自setuptools包的pkg_resources模块。 这里的假设是模块或多或少是可用的 到处都是。如果事实证明这是个问题,我想 脚本可以简化为不需要它。

支持的软件包格式

目前,只支持标准的python鸡蛋。我不介意加上 支持其他格式,python本机支持的格式有 首选。

在这方面,源tarballs对于纯 python包,似乎更普遍地可以从pypi获得。 在本地解包和导入包可能是一个前进的方向。

python轮子看起来也很有趣,并获得了一些牵引力。

支持的存储库

本地存储库

只是一个有鸡蛋的目录。这对测试非常有用。

transmute.require(['foobar'],sources=['/opt/basket'])

PyPI

transmute支持pypi的 PyPIJSON接口。

transmute.require(['foobar'],sources=[transmute.PYPI_SOURCE])

Amazon Simple Storage Service (S3)

包可以上传到s3中的目录。

虽然技术上亚马逊的s3没有文件夹的概念,但是 s3键名中的斜线('/')被滥用来维持 目录

凭据可以作为环境变量提供。transmute 识别一些相当标准的变量:

- AWS_CREDENTIAL_FILE
- AWS_ACCESS_KEY, AWS_SECRET_KEY, and (optionally) AWS_SECURITY_TOKEN
- AWS_DEFAULT_REGION and EC2_REGION

白色在ec2实例中运行时,transmute还可以选择凭据 从与之关联的IAM角色。

importtransmute.s3transmute.require(['foobar'],sources=['s3://bucket/key-prefix'])

缺少存储库格式?

我错过了一个请求。:-)

未决问题

  • 日志记录严重丢失。这有助于调试,但也有助于 跟踪更新并可能与启用回滚绑定。
  • 正在回滚标记的更新。
  • 在激活更新之前提供用于验证更新的挂钩。
  • 我们不应该在每次执行给定命令时都使用网络。保持 跟踪有关存储库查询的元数据将允许我们限制 每日或每周计划的更新。
  • 目前MD5哈希用于验证下载的 包,由存储库公布。如果能 以验证包签名。
  • 你的小便?

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java OpenShift的齿轮特性   java如何在Liferay站点的每个页面上放置公司地址和电话?   java确定整数数组中是否存在一个子集,在两个条件下求和到给定的目标值   序列化为什么java中的serialVersionUID必须是静态的、最终的、长类型的?   java响应返回null   java注入接口实现Quarkus   java我不明白为什么第二次排序的运行时间比第一次慢?   (Java)显示图像的最佳方式?   java Android应用程序因添加布局而崩溃   java如何在运行时获取泛型变量的类   java Selenium web驱动程序:无效的选择器:*:WebKitFullScreenSentor   Spring中的java注入值始终为空   Eclipse中带有TestNG插件的@BeforeSuite和@AfterSuite的java问题   使用trycatch块、filewriter和printwriter在java中创建自定义类   如何在Java 安卓上绘制相交的两条线