如何解决强制 Flask 只使用包含在 requirements.txt 中的库?
我有一个目前在 Google App Engine 上运行的 Flask 应用。在本地,应用程序在虚拟环境中运行并引用安装在 venv/Lib/site-packages 目录中的相应库。
在 GAE 中更新应用程序时,requirements.txt 用于确定需要安装哪些库/依赖项。我经常收到诸如“找不到模块”之类的乏味错误,并且必须记住在我的 requirements.txt 中添加所述模块,然后必须重新部署并检查错误日志,这需要时间。
我在我的虚拟环境中安装了一堆依赖项,其中只有一些需要在我的 requirements.txt 文件中引用,因为我只在我的 Flask 应用程序中使用了一些。因此,我试图找出一种方法来在本地测试我的应用程序,就像它在 GAE 上运行一样,强制 Flask 仅引用我的 requirements.txt 文件中的那些依赖项,因此如果出现“找不到模块”错误,我赢了不必重复 gcloud app deploy
也不必一遍一遍地浏览日志,而只需在我自己的机器上快速完成即可。
希望不要太复杂,哈哈。
解决方法
- 需要明确的是,并非虚拟环境中安装的所有内容都需要在 requirements.txt 文件中声明。安装了一些库是因为它们是另一个库的依赖项。例如,仅列出
Flask
将导致 Jinja 也被安装 - 对于您的具体问题,您基本上是说您没有缩小项目所需的实际库的范围。这通常是由于从另一个项目复制已安装的库。
- 您可以使用
pip3 freeze > requirements.txt
或pip2 freeze > requirements.txt
自动生成你的requirements.txt文件。用这种方法的问题在于,它包括安装在虚拟ENV一切,似乎你不想要这个。 - 有些人建议使用
pipreqs
(请参阅此 Stackoverflow 答案)。 - 我通常以手动方式执行此操作,即删除现有的
venv
,仅使用基础知识创建一个requirements.txt
- python、flask/django,运行您的程序,然后手动添加它抱怨的每个库进入requirements.txt文件并重新安装requirements.txt文件的内容。冲洗并重复,直到不再出错。现在您已满足全部要求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。