【问题标题】:No module named warnings when starting GAE inside virtualenv locally在本地 virtualenv 中启动 GAE 时没有模块命名警告
【发布时间】:2018-02-09 13:07:00
【问题描述】:

我正在尝试在虚拟环境中本地运行我的 GAE 应用程序。

我已经关注这两篇文章[1][2]作为设置的参考,但是当我source evn/bin/activate然后dev_appserver.py .时,它不断提高ImportError: No module named warnings的错误(下面有更多跟踪)

令人惊讶的是,如果我在不激活虚拟环境的情况下启动它,只需在项目的根目录中运行 dev_appserver.py .,它就可以毫无问题地运行。

这个问题有什么解决方案或变通方法吗?

INFO     2017-08-31 14:09:36,293 devappserver2.py:116] Skipping SDK update check.
INFO     2017-08-31 14:09:36,354 api_server.py:313] Starting API server at: http://localhost:52608
INFO     2017-08-31 14:09:36,357 dispatcher.py:226] Starting module "default" running at: http://localhost:8080
INFO     2017-08-31 14:09:36,359 admin_server.py:116] Starting admin server at: http://localhost:8000
Traceback (most recent call last):
  File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/_python_runtime.py", line 103, in <module>
    _run_file(__file__, globals())
  File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/_python_runtime.py", line 97, in _run_file
    execfile(_PATHS.script_file(script_name), globals_)
  File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/runtime.py", line 192, in <module>
    main()
  File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/runtime.py", line 172, in main
    sandbox.enable_sandbox(config)
  File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 326, in enable_sandbox
    __import__('%s.threading' % dist27.__name__)
  File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/google/appengine/dist27/threading.py", line 11, in <module>
    import warnings
  File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 1076, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named warnings
ERROR    2017-08-31 14:09:39,070 instance.py:280] Cannot connect to the instance on localhost:52366

【问题讨论】:

  • 你能解决这个问题吗?我也面临同样的问题,尝试了 2 天仍然没有运气
  • @vinitpayal 不是真的。我跳过了虚拟环境:'(​​
  • 查看此解决方案:stackoverflow.com/a/58287365/1767847

标签: python macos python-2.7 google-app-engine virtualenv


【解决方案1】:

我已经通过从我的.yamlskip_files 中删除- venv 行来解决它。 venv 是我的 virtualenv 文件夹,我还有一个 - ^venv$ 行。万一这对某人有帮助;-)

【讨论】:

  • 不知道为什么这没有更多的选票。如果有人通过谷歌找到这个帖子,这是正确的答案。
  • @valentin-coudert 解决方案实际上有帮助,但不确定为什么会这样,我认为 skip_files 仅在将应用程序部署到 GAE 时使用。另外,这是否意味着我们应该将 venv 文件夹连同代码一起部署到 GAE?
【解决方案2】:

标准环境 GAE 应用程序(非 GAE 提供)的所有依赖项必须安装在应用程序本身中,而不是安装在本地系统上。见Using third-party libraries

由于 GAE 不关心您的本地系统库(除了运行开发服务器所需的基本 python 2.7 安装),使用 virtualenv 开发标准 env GAE 应用程序没有多大意义。

您提到的文章中建议使用virtualenv实际上会引起麻烦:

  • 在本地运行时,本地 python 库可能会干扰 GAE 运行时提供的等效库(来自 SDK)(我怀疑这是您遇到的问题)
  • 在部署时,lib 目录的内容(包括您的 python 安装的所有站点包)将上传到 GAE,可能会导致与 GAE 运行时提供的库发生冲突或超出应用程序文件配额。

所以我的建议是放弃 virtualenv(在某种程度上,当你跳过 virtualenv 激活时你这样做了)并改为遵循官方文档。

【讨论】:

  • 我同意你的分析,但是官方文档说要使用virtualenv! cloud.google.com/appengine/docs/standard/python/getting-started/…
  • 如果你这样使用它是的。但问题中引用的文章不是。
  • 我不确定你的意思。我按照官方文档中描述的方式使用,遇到了和OP一样的问题。
  • 官方文档在我看来是错误的。我不知道这样的错误是怎么犯的,但至少在 OSX 上,如果你遵循它,你会遇到与 OP 相同的问题。
  • 有可能。我已经在官方文档上给了谷歌反馈,看看会发生什么。像你一样,如果开发服务器从 libs 目录中提取所有依赖项,我并不真正理解使用虚拟环境的意义,但也许我遗漏了一些东西。
【解决方案3】:

我在使用 virtualenv 中的 dev_appserver.py 同时在不同目录中运行两个 AppEngine 项目时遇到了这个问题。

如果我改用绝对路径,我发现它可以正常工作。

【讨论】:

    猜你喜欢
    • 2011-02-12
    • 2018-11-24
    • 1970-01-01
    • 2014-01-30
    • 2014-01-16
    • 2015-06-06
    • 2018-01-21
    • 2012-04-26
    • 1970-01-01
    相关资源
    最近更新 更多