【问题标题】:Forcing Flask to only use libraries contained in requirements.txt?强制 Flask 只使用 requirements.txt 中包含的库?
【发布时间】:2021-07-01 15:45:18
【问题描述】:

我有一个目前在 Google App Engine 上运行的 Flask 应用。在本地,应用程序在虚拟环境中运行,并引用安装在 venv/Lib/site-packages 目录中的相应库。

当应用在 GAE 中更新时,requirements.txt 用于确定需要安装哪些库/依赖项。我经常遇到诸如“找不到模块”之类的繁琐错误,并且必须记住在我的 requirements.txt 中添加所述模块,然后必须重新部署并检查错误日志,这需要时间。

我在我的虚拟环境中安装了一堆依赖项,其中只有一些需要在我的 requirements.txt 文件中引用,因为我只在我的 Flask 应用程序中使用了一些。因此,我试图找出一种方法来在本地测试我的应用程序,就好像它在 GAE 上运行一样,方法是强制 Flask 仅引用我的 requirements.txt 文件中的那些依赖项,所以如果出现“未找到模块”错误,我赢了不必重复 gcloud app deploy 并且必须重新搜索日志,而只需在我自己的机器上快速完成即可。

希望这不会令人费解,哈哈。

【问题讨论】:

  • 每个项目应该有一个 venv,其中仅包含该项目的依赖项。

标签: python google-app-engine requirements.txt


【解决方案1】:
  1. 需要明确的是,并非虚拟环境中安装的所有内容都需要在 requirements.txt 文件中声明。安装了一些库是因为它们是另一个库的依赖项。例如,仅列出 Flask 将导致 Jinja 也被安装
  2. 对于您的具体问题,您基本上是在说您没有缩小项目所需的实际库的范围。这通常是由于从另一个项目复制已安装的库。
  3. 您可以使用 pip3 freeze > requirements.txtpip2 freeze > requirements.txt 自动生成您的requirements.txt 文件。这种方法的问题是它会包含安装在你的虚拟环境中的所有东西,而且你似乎不想要这个。
  4. 有人建议使用pipreqs(请参阅此Stackoverflow 答案)。
  5. 我通常以手动方式执行,即删除现有的venv,创建一个仅包含基本知识的requirements.txt - python、flask/django,运行您的程序,然后手动将它抱怨的每个库添加到需求中。 txt 文件并重新安装 requirements.txt 文件的内容。冲洗并重复,直到您不再出现错误。现在您已经满足了全部要求。

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2017-09-14
    • 2017-12-14
    • 2013-01-09
    相关资源
    最近更新 更多