【问题标题】:Packaging local python dependencies for Zappa deployment为 Zappa 部署打包本地 python 依赖项
【发布时间】:2019-10-10 12:16:51
【问题描述】:

上下文

我有一个本地文件夹,其中包含多个 Python Flask 应用程序和一个 commons python 包。如您所见,我为每个 Flask 应用程序创建了一个 virtualenv,因为我想使用 Zappa 部署到 AWS Lambda,并且只想在发送到 AWS 的包 zip 中包含相关的依赖项。

project_folder/
 +-- commons/
 |   +-- __init__.py
 |   +-- setup.py
 |   +-- module1.py
 +-- application1/
 |   +-- __init__.py
 |   +-- app.py
 |   +-- env/
 +-- application2/
 |   +-- __init__.py
 |   +-- app.py
 |   +-- env/

问题

我无法在 Flask 应用程序中包含 commons 包。我认为这是必须的,因为它是附属而不是子目录。

  • 我想避免在每个 Flask 应用程序中添加副本。
  • 我不想将整个项目创建成一个巨大的包,因为它对于 AWS Lambda 来说太大了

问题

当我从project_folder/application1/ 内部调用zappa deploy 时,如何确保包含commons 包?

【问题讨论】:

    标签: python flask python-import zappa


    【解决方案1】:

    其中一种解决方案是将软件包安装在您的虚拟环境中(commons 目录中的pip install .)。 Zappa 将使用其中安装的所有软件包。

    当然,这有点麻烦,因为每次修改它都需要重新安装包。您可以:

    1. 创建一个脚本,通过重新安装然后调用 zappa deploy 来帮助您。
    2. 尝试在 zappa_settings.jsoncallbacks 部分中创建您自己的模块并注册。该模块将由部署/更新过程调用,理论上可以预先重新安装包。但是,这只是我的猜测,它可能是可能的。我从未尝试过这样的事情。

    【讨论】:

    • 感谢您的快速回答!恐怕我什至无法通过使用pip install . 来让它工作一次。 Commons 的安装运行良好,但是当我 cd application1 并运行 python -c "import commons" 时它将无法正常工作。因为导入不在路径中。只需在代码中附加路径即可在本地工作,但不适用于 Zappa 包。
    • @TomHemmes 这可能是因为您没有有效的目录结构并且 pip 实际上没有找到任何要安装的包。尝试将 module1.py 放在 commons/mypackage/module1.py 中。然后尝试再次安装并通过运行pip list 检查是否安装了mypackage。如果您不管理,我会尝试通过添加 setup.py 的示例来更改答案。
    • 完全是这样,多么愚蠢,因为我使用的是find_packages(),我根本没有听懂这个。非常感谢,这让我可以部署。您的第一个选项解决了问题,我将测试第二个选项并报告哪个效果更好!
    猜你喜欢
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2018-07-19
    • 2019-10-26
    相关资源
    最近更新 更多