mod_wsgi, flask 與 python3

我是在 OpenShift 上遇到的情況,用 python3 + flask 寫的 web app 沒辦法啟動,用 rhc tail 出現這樣的錯誤訊息:

‘module’ object has no attribute ‘__loader__’

用 Google 找,在 StackOverflow 上找到這篇 flask – cannot setup apache 2.2 with mod_wsgi and python 3.3? ,然後跟著提供的線索看到這篇:Problem debugging Flask under Python 3.3 ,謝謝 Eric 提供的 workaround 。

workaround 是這樣的,在初使化 Flask(name) 時,加上 instance_path 參數,所以我就改為 Flask(name, os.path.join(os.environ[‘OPENSHIFT_PYTHON_DIR’], ‘instance’)) ,就解決了。

問題是出在 flask.Flask 的初始函數裡,Flask.init 在 instance_path 參數為 None 時,會呼叫 auto_find_instance_path() 來取得 instance_path 的值,而 auto_find_instance_path() 又呼叫 flask.helpers 的 find_packages(),find_packages() 使用了 pkgutil.get_loader() 來尋找 module 而導致了錯誤發生。

我在想,或許添加適當的 init.py 也可以解決,但就懶得做實驗了,先這樣。