Google App Engine - Python 3 - ModuleNotFoundError:没有名为“pytz”的模块

Posted

技术标签:

【中文标题】Google App Engine - Python 3 - ModuleNotFoundError:没有名为“pytz”的模块【英文标题】:Google App Engine - Python 3 - ModuleNotFoundError: No module named 'pytz' 【发布时间】:2019-02-26 00:11:25 【问题描述】:

我正在尝试在标准 Python37 环境中部署到 Google App Engine。我有一个以前的版本没有使用 pytz 或 requests 但确实使用了外部 python 库。

添加这些依赖项并部署然后查看网站后,我收到 500 错误。查看日志它说:

ModuleNotFoundError:没有名为“pytz”的模块 ModuleNotFoundError:没有名为“请求”的模块

docs 表示 Python 应用程序的依赖项在标准 requirements.txt 文件中声明。我已经做到了。

requirements.txt 的内容

点击==6.7 烧瓶==1.0.2 geojson==2.4.0 它的危险==0.24 Jinja2==2.10 MarkupSafe==1.0 pkg-资源==0.0.0 pymongo==3.7.1 pytz==2018.5 Werkzeug==0.14.1

我的 app.yaml

runtime: python37

handlers:
- url: /static
  static_dir: static

- url: /.*
  script: auto

main.py 的开始

import json
import time
import pytz
import requests   

堆栈跟踪中的错误:

Traceback (most recent call last): 
File "/env/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, 
in spawn_worker 
    worker.init_process() 
File "/env/lib/python3.7/site-packages/gunicorn/workers/gthread.py", 
line 104, in init_process 
    super(ThreadWorker, self).init_process() 
File "/env/lib/python3.7/site-packages/gunicorn/workers/base.py", line 
129, in init_process
    self.load_wsgi() 
File "/env/lib/python3.7/site-packages/gunicorn/workers/base.py", line 
138, in load_wsgi 
    self.wsgi = self.app.wsgi() 
File "/env/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, 
in wsgi 
    self.callable = self.load() 
File "/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 
52, in load return 
    self.load_wsgiapp() 
File "/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 
41, in load_wsgiapp 
    return util.import_app(self.app_uri) 
File "/env/lib/python3.7/site-packages/gunicorn/util.py", line 350, in 
import_app 
    __import__(module) 
File "/srv/main.py", line 4, in <module> 
    import pytz 
ModuleNotFoundError: No module named 'pytz'`enter code here`

我已经在 GAE 上本地安装和测试了这些模块,并验证它们可以工作。错误仅在部署时出现。任何有关如何修复这些错误和成功部署的建议将不胜感激。

编辑:

我已经更新了我的 requirements.txt 以添加请求和删除 pkg-resources 因为它开始在构建时给出错误。的内容 requirements.txt

点击==6.7 烧瓶==1.0.2 geojson==2.4.0 它的危险==0.24 Jinja2==2.10 MarkupSafe==1.0 pymongo==3.7.1 pytz==2018.5 请求==2.18.4 Werkzeug==0.14.1

【问题讨论】:

你还没有将requests添加到requirements.txt 抱歉,我使用了错误环境的 pip freeze 。我已经添加了请求,并且对这个问题进行了排序,但是 pytz 错误仍然存​​在。我将编辑帖子以提及这一点 【参考方案1】:

我能够部署以下应用:

app.yaml:

runtime: python37

handlers:
- url: /static
  static_dir: static

- url: /.*
  script: auto

requirements.txt:

click==6.7
Flask==1.0.2
geojson==2.4.0
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
pymongo==3.7.1
pytz==2018.5
requests==2.18.4
Werkzeug==0.14.1

main.py:

from flask import Flask

import pytz

app = Flask(__name__)


@app.route('/')
def hello():
    """Return a friendly HTTP greeting."""
    return pytz.VERSION

这样就成功返回了pytz的版本。

您确定新的需求文件包含pytz 并且正在部署吗?您可以通过在 Google Cloud Console 中导航来检查:

资源 > App Engine > 服务,然后在您的服务所在的行中,诊断 > 工具 > 来源。从那里您可以找到requirements.txt 文件并验证它是否包含pytz==2018.5

【讨论】:

以上是关于Google App Engine - Python 3 - ModuleNotFoundError:没有名为“pytz”的模块的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud 中的 Google Compute Engine、App Engine 和 Container Engine 有啥区别?

连接 Google App Engine 和 Google Compute Engine

Google App Engine Flexible 和 Google Container Engine 之间的区别?

如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?

将 Meteor 部署到 Google App Engine 2017

Google BigQuery 的 Google App Engine 授权