【问题标题】:Using SetupTools on Google App Engine to dynamically download and install python modules使用 Google App Engine 上的 SetupTools 动态下载和安装 python 模块
【发布时间】:2012-02-13 21:09:43
【问题描述】:

我想在我的 App Engine 应用程序中构建一个管理部分,以允许我动态下载和安装 python 模块。

关于在没有写入文件系统的能力的情况下完成此任务的最有效方法的任何想法?

有没有这样做的例子?

python27 support of setuptools 是否使这更容易?

编辑:

我最初的想法是,这可以通过动态下载 egg 或 zip 文件来完成。将其保存到 blobstore,如果从那里加载。

这可能吗?

这会产生什么样的性能问题?

【问题讨论】:

  • ...你到底为什么要这样做?
  • @NickJohnson 主要是易于使用。我正在构建一个电子商务应用程序,我想让开发人员能够通过管理部分加载插件和下载补丁,而不是需要重新部署。关于如何实现这一点的任何提示? imp 模块?
  • 我强烈建议不要这样做。让他们重新部署(或者如果您正在做 SAAS,则自己重新部署),或者构建完整的扩展集并让他们根据需要启用它们。

标签: python google-app-engine setuptools python-2.7


【解决方案1】:

在 GAE 上,您无法访问文件系统,这就是为什么您不能在您的实例上安装任何第三方软件包,您只能使用自己的代码分发它们。

【讨论】:

  • 我意识到这一点。我在想也许可以通过将模块加载为 zip 文件或从 blobstore 加载鸡蛋来规避此限制。
  • 不。压缩模块必须作为资源可供应用程序使用。上传资源的唯一方法是通过appcfg(或前端的东西)。
  • 实际上,您当然可以编写一个自定义导入挂钩,从任意来源导入 Python 模块。但我不明白你为什么要这么做。
【解决方案2】:

在您的应用程序目录中创建一个名为“lib”的文件夹。对于您要添加的任何模块,只需将其解压缩并将其添加到 lib。然后使用控制台或 Google App Launcher 重新部署您的应用程序。每次要添加新模块时重复此操作。

我对此不是 100% 确定的。但在我看来,如果不希望涉及手动过程,那么我建议将模块内容动态添加为 blob 存储条目并在运行时加载模块。

但如上一个答案所述,诀窍是要使用包,其代码需要存在于您的应用中。

【讨论】:

  • 从 blob 存储加载是我想做的。您对如何在运行时加载模块有任何想法吗?谢谢
猜你喜欢
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
相关资源
最近更新 更多