Mac OS X 10.6.2(Snow Leopard)のGoogle App Engine for Python(ローカル)で、urllibが使えない...??

GAE for Python(ローカル)にてurllibが動かない!

  • 11.4 urllib -- URL による任意のリソースへのアクセス

http://www.python.jp/doc/2.4/lib/module-urllib.html
PythonをGAE、経由させなければ動くのに。。なぜ・・?

めちゃめちゃハマって、なんとかフィックス出来たので、
メモ代わり解決策を載せます。

  • なにも変哲もないただのurlをopenするプログラム
import urllib
def main():
	url = "http://www.google.com/"
	result = urllib.urlopen(url)
	print result.read()

if __name__ == '__main__':
	main()

しかし、こんなエラーが↓↓↓↓↓↓

  • エラーログ
Traceback (most recent call last):
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 3177, in _HandleRequest
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 3120, in _Dispatch
    base_env_dict=env_dict)
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 515, in Dispatch
    base_env_dict=base_env_dict)
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 2379, in Dispatch
    self._module_dict)
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 2289, in ExecuteCGI
    reset_modules = exec_script(handler_path, cgi_path, hook)
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 2185, in ExecuteOrImportScript
    exec module_code in script_module.__dict__
  File "/Library/WebServer/CGI-Executables/python/google_appengine/aws/main.py", line 10, in <module>
    main()
  File "/Library/WebServer/CGI-Executables/python/google_appengine/aws/main.py", line 5, in main
    result = urllib.urlopen(url)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 82, in urlopen
    opener = FancyURLopener()
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 611, in __init__
    URLopener.__init__(self, *args, **kwargs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 129, in __init__
    proxies = getproxies()
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 1558, in getproxies
    return getproxies_environment() or getproxies_macosx_sysconf()
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 1448, in getproxies_macosx_sysconf
    from ctypes import cdll
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 1264, in Decorate
    return func(self, *args, **kwargs)
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 1914, in load_module
    return self.FindAndLoadModule(submodule, fullname, search_path)
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 1264, in Decorate
    return func(self, *args, **kwargs)
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 1816, in FindAndLoadModule
    description)
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 1264, in Decorate
    return func(self, *args, **kwargs)
  File "/Library/WebServer/CGI-Executables/python/google_appengine/google/appengine/tools/dev_appserver.py", line 1767, in LoadModuleRestricted
    description)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ctypes/__init__.py", line 10, in <module>
    from _ctypes import Union, Structure, Array
ImportError: No module named _ctypes
  • 早速、調べてみよ!!

ほうほう。同じ悩みの人発見!
Import Error: Failed to import ctypes to load dll on windows@Google Code
どうやらGAEではpython 2.6のurllibが動かないらしい。。
しかも「Mac OS X 10.6.2」限定っぽい?
(原因は現在も調査中。。)

  • 対策!!

ってことは、Python 2.5から動かせばいいってことね。
Pythonのパスを2.6から2.5に変更してもいいけど、
他のところで影響が出たらイヤなので、
GAEの起動時のPythonを2.5から起動するようにしよー

    • 通常
 $ ./dev_appserver.py src/
    • 今回
 $ /usr/bin/python2.5 ./dev_appserver.py src/

参考URL : Feed parser error - _ctypes - broke in 1.2.5 and Snow Leopard
これで動いたよー
あーよかったよかった。ハマったハマった。。
さー作業の続きやろw