运行Google App Engine测试项目时出现ImportError

时间:2012-04-19 05:49:45

标签: google-app-engine python-2.7

我是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代码。
  3. 由于第二个是不可能的,谷歌支持2.7,我不知道这是什么错误。

    试着找出自己,但不能成功。

11 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您启用了线程安全,因此您应该使用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以创建您的第一个&#34; Hello World&#34;应用

答案 3 :(得分:1)

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

打开Goog​​le云端硬盘优惠,在启动后关闭自动运行 关闭Google云端硬盘 或者只是卸载谷歌驱动器(谷歌驱动器似乎使用Python 2.5 _socket库

卸载python和GAE 重启 安装python27和GAE 最重要的是,指定一个新路径,不要再使用默认的c:\ python27(我将其更改为c:\ mypython27。与GAE相同,使用新路径。

然后再次运作。

答案 4 :(得分:0)

使用Python 2.7安装严重破坏了部分内容 - 部分内容引用了Python 2.5库。您应该在计算机上卸载所有版本的Python,然后重新安装所需的版本。

答案 5 :(得分:0)

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

我遇到了完全相同的问题,在我看来,Python 2.7将尝试在GAE路径下使用不正确的_socket.pyd lib,从PATH中删除GAE路径将解决此问题。

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

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

答案 6 :(得分:0)

对我而言,我确实将系统变量PYTHONPATH设置为'。'。删除变量就完成了工作!

答案 7 :(得分:0)

我将PYTHON_PATH设置为

  

“C:\ Program Files \ Google \ google_appengine; C:\ Program   FILES \谷歌\ google_appengine \ LIB \ antlr3; C:\ PROGRAM   文件\谷歌\ google_appengine \ lib中\ django_0_96 ; C:\程序   FILES \谷歌\ google_appengine \ LIB \ fancy_urllib; C:\ PROGRAM   FILES \谷歌\ google_appengine \ LIB \造影; C:\ PROGRAM   FILES \谷歌\ google_appengine \ LIB \ IPADDR; C:\ PROGRAM   FILES \谷歌\ google_appengine \ LIB \ simplejson; C:\ PROGRAM   FILES \谷歌\ google_appengine \ LIB \的WebOb; C:\ PROGRAM   文件\谷歌\ google_appengine \ LIB \ YAML \ LIB“

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

  

“C:\ Program Files \ Google \ google_appengine; C:\ Program   FILES \谷歌\ google_appengine \ LIB \ antlr3; C:\ PROGRAM   文件\谷歌\ google_appengine \ lib中\ django的-1.4 ; C:\程序   FILES \谷歌\ google_appengine \ LIB \ fancy_urllib; C:\ PROGRAM   FILES \谷歌\ google_appengine \ LIB \造影; C:\ PROGRAM   FILES \谷歌\ google_appengine \ LIB \ IPADDR; C:\ PROGRAM   FILES \谷歌\ google_appengine \ LIB \ simplejson; C:\ PROGRAM   FILES \谷歌\ google_appengine \ LIB \的WebOb; C:\ PROGRAM   文件\谷歌\ google_appengine \ LIB \ YAML \ LIB“

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

答案 8 :(得分:0)

某些程序可能会修改PYTHONPATH环境变量。如果你检查它的值(系统 - &gt;环境变量)并确保它设置为正确的python 2.7路径(默认C:\ Python27),那么这应该解决问题。在我的情况下,有些东西已经设置为我的google appengine路径。

答案 9 :(得分:0)

ImportError: Module use of python25.dll conflicts with this version of Python.

问题是python25.dll与Python 2.7安装冲突。此python25.dll来自过时的Google App Engine Launcher for Windows,位于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获得了启动程序,当然还有suxx,谷歌仍然提供了多个版本的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,你可以加注星标并发表评论,以便有一天修复它。

答案 10 :(得分:0)

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