Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 强制Flask仅使用requirements.txt中包含的库?_Python_Google App Engine_Requirements.txt - Fatal编程技术网

Python 强制Flask仅使用requirements.txt中包含的库?

Python 强制Flask仅使用requirements.txt中包含的库?,python,google-app-engine,requirements.txt,Python,Google App Engine,Requirements.txt,我有一个Flask应用程序目前正在谷歌应用程序引擎上运行。在本地,该应用程序在虚拟环境中运行,并引用安装在venv/Lib/site packages目录中的相应库 在GAE中更新应用程序时,requirements.txt用于确定需要安装哪些库/依赖项。我经常会遇到诸如“找不到模块”之类的乏味错误,必须记住在我的requirements.txt中添加所述模块,然后必须重新部署并检查错误日志,这需要时间 我在虚拟环境中安装了一系列依赖项,其中只有一部分需要在requirements.txt文件中

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

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

我在虚拟环境中安装了一系列依赖项,其中只有一部分需要在requirements.txt文件中引用,因为我在Flask应用程序中只使用了少数依赖项。因此,我试图找出一种方法,通过强制Flask只引用我requirements.txt文件中的依赖项,从而在本地测试我的应用程序,就像它在GAE上运行一样,如果出现“找不到模块”错误,我不必重复
gcloud app deploy
,也不必再次浏览日志,只需在自己的机器上快速完成即可

希望这不会让人感到困惑,哈哈

  • 要清楚,并非所有安装在虚拟环境中的内容都需要在requirements.txt文件中声明。安装某些库是因为它们是另一个库的依赖项。例如,仅列出
    Flask
    将导致安装Jinja
  • 对于您的特定问题,您基本上是说您没有缩小项目所需的实际库的范围。这通常是由于从另一个项目复制了过多安装的库
  • 您可以使用
    pip3 freeze>requirements.txt
    pip2 freeze>requirements.txt
    自动生成requirements.txt文件。这种方法的问题在于,它将包括虚拟环境中安装的所有内容,而您似乎不希望这样
  • 一些人建议使用
    pipreqs
    (参见此答案)
  • 我通常采用手动方式,即删除现有的
    venv
    ,创建一个
    requirements.txt
    ,只使用基本的python、flask/django,运行程序,然后手动将它抱怨的每个库添加到requirements.txt文件中,并重新安装requirements.txt文件的内容。冲洗并重复,直到不再出现错误。现在你有了你的全部要求

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