Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 2.7 Google AppEngine dev_appserver引发ImportError,尽管该软件包安装在virtualenv中,并可在Google Cloud SDK中使用_Python 2.7_Google App Engine_Google App Engine Python - Fatal编程技术网

Python 2.7 Google AppEngine dev_appserver引发ImportError,尽管该软件包安装在virtualenv中,并可在Google Cloud SDK中使用

Python 2.7 Google AppEngine dev_appserver引发ImportError,尽管该软件包安装在virtualenv中,并可在Google Cloud SDK中使用,python-2.7,google-app-engine,google-app-engine-python,Python 2.7,Google App Engine,Google App Engine Python,我正在从事一个使用传统Python 2.7运行时的Google AppEngine项目——我的团队正在迁移,但我们目前仍在使用它。在过去的6个月里,本地开发对我来说运行良好,我的团队中没有其他人受到以下问题的影响 在启动dev_appserver.py时,以及在处理任何请求时,我都会收到一个ImportError: 09:36:59 dev_server.1 | ERROR 2021-05-13 13:36:59,470 wsgi.py:269] 09:36:59 dev_serv

我正在从事一个使用传统Python 2.7运行时的Google AppEngine项目——我的团队正在迁移,但我们目前仍在使用它。在过去的6个月里,本地开发对我来说运行良好,我的团队中没有其他人受到以下问题的影响

在启动
dev_appserver.py
时,以及在处理任何请求时,我都会收到一个
ImportError

09:36:59 dev_server.1    | ERROR    2021-05-13 13:36:59,470 wsgi.py:269] 
09:36:59 dev_server.1    | Traceback (most recent call last):
09:36:59 dev_server.1    |   File "/Users/me/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
09:36:59 dev_server.1    |     handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
09:36:59 dev_server.1    |   File "/Users/me/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 311, in _LoadHandler
09:36:59 dev_server.1    |     handler, path, err = LoadObject(self._handler)
09:36:59 dev_server.1    |   File "/Users/me/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
09:36:59 dev_server.1    |     obj = __import__(path[0])
09:36:59 dev_server.1    |   File "/Users/me/Source/myproject/main.py", line 5, in <module>
09:36:59 dev_server.1    |     import webapp2
09:36:59 dev_server.1    |   File "/Users/me/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 25, in <module>
09:36:59 dev_server.1    |     import webob
09:36:59 dev_server.1    |   File "/private/var/folders/qs/2qn9hbhn3k77wbhgsg77w6tm0000gn/T/pip-target-etkWjd/lib/python/webob/__init__.py", line 1, in <module>
09:36:59 dev_server.1    |   File "/Users/me/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/runtime/sandbox.py", line 1168, in load_module
09:36:59 dev_server.1    |     raise ImportError('No module named %s' % fullname)
09:36:59 dev_server.1    | ImportError: No module named webob.datetime_utils
以及
app.yaml
中规定的:

libraries:
...
- name: webob
  version: "1.2.3"
...
我已确保在启动dev_appserver.py时我的virtualenv处于活动状态

对我来说,奇怪的是这一行回溯:

09:36:59 dev_server.1  |  File "/private/var/folders/qs/2qn9hbhn3k77wbhgsg77w6tm0000gn/T/pip-target-etkWjd/lib/python/webob/__init__.py", line 1, in <module>
09:36:59 dev|server.1 | File”/private/var/folders/qs/2qn9hbhn3k77wbhgsg77w6tm0000gn/T/pip target etkWjd/lib/python/webob/uu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我不知道为什么要执行
/private/var/folders
中的代码-它不应该调用我的virtualenv中的代码或Google Cloud SDK提供的代码吗

它似乎在SDK中-调用者是
google cloud SDK/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py
,但是我找不到任何理由解释为什么
webob
的解析路径在
/private/var/folders
中,而不是我的virtualenv,或者更合理地说,
webob-1.2.3
包也位于
googlecloudsdk/platform/google\u appengine/lib/

事实上,在长达6年的Python全职开发中,我从未在回溯中看到过这样的文件路径——我总是希望执行的代码出现在我自己的文件或相关virtualenv的
站点包中

此外,回溯中的文件不存在(或者至少我看不到):尝试
ls
/private/var/folders/qs/2qn9hbhn3k77wbhgsg77w6tm0000gn/t/pip target etkWjd/
目录会导致
没有此类文件或目录

我所尝试的:

  • 完全删除并重新安装了我的virtualenv和Google Cloud SDK
  • 删除了
    webob
    pip
    安装实例
  • 使用SDK(1.2.3)附带的相同版本重新安装了
    webob
  • 使用
    pyenv
    安装了一个新的python2.7实例,并使用它删除和重新创建我的virtualenv
  • 从my
    路径中删除所有无关条目,以查看某个条目是否导致导入系统以意外方式解析
    webob

  • 所有这些都不起作用。最终,我仍然不确定如果包安装在活动的virtualenv中,导入怎么会失败-我希望Google Cloud SDK中的
    webapp2
    模块能够通过virtualenv解决导入问题,但我绝对不是导入系统的专家。

    在尝试导入
    webob
    之前,我在
    /Users/me/google cloud sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py
    中添加了以下代码:

    import imp
    fp, pathname, description = imp.find_module('webob')
    print '--------------------------'
    print fp
    print pathname
    print description
    print '--------------------------'
    
    其中:

    14:03:13 dev_server.1    |--------------------------
    14:03:13 dev_server.1    | None
    14:03:13 dev_server.1    | /Users/me/Source/myproject/lib/webob
    14:03:13 dev_server.1    | ('', '', 5)
    14:03:13 dev_server.1    | --------------------------
    
    lib
    中的
    webob
    目录是意外的-它包含在GAE上的python2运行时以及SDK中,因此不需要在
    lib
    中出售。它也是空的,所以我没有注意到它,因为
    git
    没有报告任何新的未跟踪文件


    我不太清楚该机制,但这是导致导入问题的原因-我一删除空目录,问题就解决了。

    也许可以尝试从虚拟环境中卸载WebOb。GAE first gen希望使用自己的内部WebOb,因此在您的虚拟环境中出现WebOb可能会令人困惑。@gaefan感谢您的关注!我也有同样的想法,但不幸的是这没有帮助。为了更好的衡量,我刚刚用我的新virtualenv再次尝试,但结果是一样的。我已经验证了内部WebOb是否存在于SDK文件夹中,因此我不确定为什么在导入过程中,
    sandbox.py
    无法找到它。
    14:03:13 dev_server.1    |--------------------------
    14:03:13 dev_server.1    | None
    14:03:13 dev_server.1    | /Users/me/Source/myproject/lib/webob
    14:03:13 dev_server.1    | ('', '', 5)
    14:03:13 dev_server.1    | --------------------------