【问题标题】:ImportError while running Google App Engine test project运行 Google App Engine 测试项目时出现 ImportError
【发布时间】:2012-04-19 05:49:45
【问题描述】:

我是 Google App Engine 的新手,所以我只是按照程序测试了一个只打印“hello world”的应用程序。

(按照 Google App Engine 文档)

项目文件夹名称为“GoogleApp”

这是我的 Python 文件:

文件名:sayHello.py

#!/usr/bin/env python

def main():
    print "hello"
    pass

if __name__ == '__main__':
    main()

这是yaml文件

文件名:app.yaml

application: GoogleApp
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: sayHello.py

当我刚刚在 Google App Engine Launcher 中运行项目时,这是我得到的日志错误

2012-04-19 10:52:23 Running command: "['C:\\Python27\\pythonw.exe', 'C:\\Program Files\\Google\\google_appengine\\dev_appserver.py', '--admin_console_server=', '--port=8080', 'D:\\Code\\Projects\\IRCmathBot\\GoogleApp']"
Traceback (most recent call last):
  File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 125, in <module>
    run_file(__file__, globals())
  File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 121, in run_file
    execfile(script_path, globals_)
  File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_main.py", line 157, in <module>
    from google.appengine.tools import appcfg
  File "C:\Program Files\Google\google_appengine\google\appengine\tools\appcfg.py", line 41, in <module>
    import mimetypes
  File "C:\Python27\lib\mimetypes.py", line 29, in <module>
    import urllib
  File "C:\Python27\lib\urllib.py", line 26, in <module>
    import socket
  File "C:\Python27\lib\socket.py", line 47, in <module>
    import _socket
ImportError: Module use of python25.dll conflicts with this version of Python.
2012-04-19 10:52:25 (Process exited with code 1)

实际上,我使用的是 Python 2.7。上面的日志说 python25.dll 与 python 的版本冲突。

我不知道它到底是什么意思,但我可以理解

  1. 它应该要么只支持 python 2.5 要么
  2. 我应该使用 python 2.5 代码。

因为第二个是不可能的,而且谷歌支持 2.7,我不知道这个错误是什么。

试图弄清楚自己,但没有成功。

【问题讨论】:

    标签: google-app-engine python-2.7


    【解决方案1】:

    我遇到了一个非常相似的问题(在运行教程代码时),并通过检查我的 PythonPath 系统环境变量来解决它。

    对我来说,OpenCV 编辑了 PythonPath 变量以指向它自己的目录结构,而不是基础 Python 安装本身。

    您可以通过打开“高级系统属性”窗口并单击“环境变量”按钮来编辑环境变量。 “系统变量”下的“PythonPath”变量。至少,它应该包含您的 python 可执行文件的路径,例如 'C:\Python27\'。

    【讨论】:

    • 我在使用 PYTHONPATH 时遇到了同样的问题。在我的情况下,有一个指向 Mapnik 的链接。删除链接后,Google App Engine 运行良好。
    【解决方案2】:

    你试过命令行吗?忘记启动器。 我有同样的问题!我多次重新安装 Python,更改了版本。这很有趣。 使用 2.5 版本的启动器可以启动服务器,但应用程序不起作用,但我可以通过启动器在线上传。 使用 Python 版本。 2.7,启动器显示您正在处理的相同问题。我也无法在本地启动服务器。但是命令行运行良好,无论是在本地启动服务器还是在线上传。 所以我会坚持使用 2.7 版。希望对你有帮助,告诉我..

    【讨论】:

      【解决方案3】:

      您已启用线程安全,因此您应该使用 WSGI 处理程序。这可能是问题所在。我会用以下代码替换您的代码:

      文件:helloworld.py

      import webapp2
      
      class MainPage(webapp2.RequestHandler):
          def get(self):
              self.response.headers['Content-Type'] = 'text/plain'
              self.response.out.write('Hello, WebApp World!')
      
      app = webapp2.WSGIApplication([('/', MainPage)])
      

      文件:app.yaml

      application: GoogleApp
      version: 1
      runtime: python27
      api_version: 1
      threadsafe: true
      
      handlers:
      - url: /.*
        script: helloworld.app
      

      如果在 Google AppEngine 上使用 Python2.7,请参考此官方 documentation 创建您的第一个“Hello World”应用程序。

      【讨论】:

      • 我确实尝试过,即使没有线程安全声明。但是,它没有用!
      • 您的代码基于什么文档?如果您使用的是 Python2.7,则入门的官方文档是 developers.google.com/appengine/docs/python/… ...您提供的代码看起来不像您基于这些文档。也许你基于 Python25 文档。
      • 您能否尝试一下我上面给出的链接中的说明,看看是否适合您? :)
      • 是的。请给我一分钟
      • 如果不是您的代码,则可能是您的 Google App Engine SDK 安装或 Python 安装或两者都有问题。我很抱歉,但目前我想不出任何建议。
      【解决方案4】:

      经过 3 小时的努力,我解决了这个问题。重新安装无法解决我的问题,弄乱用户/系统环境变量也不起作用。 按照这个步骤工作:

      打开Goog​​le Drive Perference,关闭win启动后自动运行 关闭 Google 云端硬盘 或者干脆卸载谷歌驱动器(谷歌驱动器似乎使用 Python 2.5 _socket 库

      卸载python和GAE 重启 安装python27和GAE 最重要的是,指定一个新的路径,不要再使用默认的c:\python27(我改成c:\mypython27了。和GAE一样,使用新的路径。

      然后它再次工作。

      【讨论】:

        【解决方案5】:

        您的 Python 2.7 安装出现了严重问题 - 其中一部分引用了 Python 2.5 库。你应该卸载你机器上所有版本的 Python,然后重新安装你需要的版本。

        【讨论】:

        • 这不是 Python 2.7 安装的问题 - 这是启动器的问题。
        • @techtonik 启动器没有(或至少没有)捆绑 Python;问题出在 Python 本身。
        • Launcher 在没有捆绑的 python25.dll 的情况下将无法工作,因为它使用针对此库编译的 wxPython 绑定。
        • @techtonik 现在就是这样 - 但这个答案是在一年前写的,在 Python 与启动器捆绑之前。
        • 我不太确定。如果拿两年前 2011 年 10 月 11 日发布的 GoogleAppEngine-1.5.5.msi,python25.dll 就在那里。
        【解决方案6】:

        我猜你已经将 GAE 路径添加到环境变量 PATH 中了?只需将其删除。

        我和你有同样的问题,在我看来 Python 2.7 会尝试在 GAE 路径下使用不正确的 _socket.pyd 库,从 PATH 中删除 GAE 路径将解决这个问题。

        它不需要额外的编码,只需要你的 win 操作系统的一个小配置。 由于我的操作系统语言是中文,以下图标/链接的名称是我自己翻译的中文,我不能保证是正确的:(

        1. 右键单击“计算机”图标,选择“属性”,您将看到系统面板显示一些基本系统信息;
        2. 单击“高级系统设置”链接,您将看到包含多个选项卡的系统属性面板;
        3. 选择“高级”选项卡,底部应该有一个名为“环境变量”的按钮,点击它,您会看到一个显示系统所有环境变量的对话框;
        4. 查找并编辑名为“PATH”或“Path”的变量(不区分大小写):如果其值包含指向您的 GAE 的路径,则删除 GAE 路径。

        【讨论】:

          【解决方案7】:

          对我来说,我确实将系统变量 PYTHONPATH 设置为“.”。删除变量就可以了!

          【讨论】:

            【解决方案8】:

            我将 PYTHON_PATH 设置为

            "C:\Program Files\Google\google_appengine;C:\Program 文件\Google\google_appengine\lib\antlr3;C:\Program Files\Google\google_appengine\lib\django_0_96;C:\Program 文件\Google\google_appengine\lib\fancy_urllib;C:\Program 文件\Google\google_appengine\lib\graphy;C:\Program 文件\Google\google_appengine\lib\ipaddr;C:\Program 文件\Google\google_appengine\lib\simplejson;C:\Program 文件\Google\google_appengine\lib\webob;C:\Program 文件\Google\google_appengine\lib\yaml\lib"

            但后来我意识到 django 0.96 需要 python 2.5,所以使用 django 1.4,它工作正常。

            "C:\Program Files\Google\google_appengine;C:\Program 文件\Google\google_appengine\lib\antlr3;C:\Program Files\Google\google_appengine\lib\django-1.4;C:\Program 文件\Google\google_appengine\lib\fancy_urllib;C:\Program 文件\Google\google_appengine\lib\graphy;C:\Program 文件\Google\google_appengine\lib\ipaddr;C:\Program 文件\Google\google_appengine\lib\simplejson;C:\Program 文件\Google\google_appengine\lib\webob;C:\Program 文件\Google\google_appengine\lib\yaml\lib"

            如果您遇到与上述相同的问题,只需检查 PATH、PYTHON_PATH 以查看库和 python 之间的版本是否不匹配。希望对您有所帮助。

            【讨论】:

              【解决方案9】:

              某些程序可能会修改PYTHONPATH 环境变量。如果您检查它的值(系统 -> 环境变量)并确保它设置为正确的 python 2.7 路径(默认 C:\Python27),那么这应该可以解决问题。就我而言,某些东西已将其设置为我的 google appengine 路径。

              【讨论】:

                【解决方案10】:
                ImportError: Module use of python25.dll conflicts with this version of Python.
                

                问题是python25.dll 与您的 Python 2.7 安装冲突。这个python25.dll 来自已经过时的Windows 版Google App Engine Launcher,位于C:\Program Files\Google\google_appengine\launcher

                这不是您的 Python 2.7 安装的问题 - 这是 Launcher 的问题,它会将自己的 Python 路径注入应用程序环境。要对此进行测试,请在首次导入后在 google_appengine/dev_appserver.py 的顶部添加以下行:

                from pprint import pprint
                pprint(sys.path)
                

                然后重新运行您的应用程序以获取新日志并亲自查看:

                ...
                'C:\\OpenCV2.3\\opencv\\build\\python\\2.7',
                'C:\\Google\\google_appengine\\launcher',
                'C:\\Windows\\system32\\python27.zip',
                'C:\\Python27\\DLLs',
                ...
                

                我从 Python .msi SDK 1.8.8 中获得了启动器,当然 Google 仍然提供了几个版本的 SDK 带有损坏的 GUI 工具。要解决此问题,请在 dev_appserver.py 中首次导入后添加以下内容:

                # --- Repair sys.path after broken GAE Windows Launcher
                # see http://stackoverflow.com/questions/10222342/
                ROOT = os.path.abspath(os.path.dirname(__file__))
                LAUNCHPATH = os.path.join(ROOT, 'launcher')
                if LAUNCHPATH in sys.path:
                  sys.stderr.write('[BUG] GAE Windows Launcher detected. Fixing..\n')
                  sys.path.remove(LAUNCHPATH)
                # /--
                

                很遗憾,当新版本的 GAE 发布时,您需要重复此过程。 AppEngine 跟踪器上有一个issue #8568,您可以对其加注星标和评论,以使其有朝一日得到修复。

                【讨论】:

                  【解决方案11】:

                  环境变量中有 PYTHONPATH 变量吗?删除它并重新启动 Google App Engine Launcher,它会工作!

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2014-05-07
                    • 1970-01-01
                    • 2011-12-09
                    • 2015-09-21
                    • 2015-09-07
                    • 1970-01-01
                    • 2019-10-08
                    • 1970-01-01
                    相关资源
                    最近更新 更多