2013-10-28 52 views
5

的情況是:在IOS應用程式(libpython2.7.a)蟒「__file__」沒有定義

蟒嵌入,所有邏輯由蟒所著,一些API支持,雖然痛飲渦卷調用,如果蟒被PY(C,O)一切正常,但太慢,我想加快比我用用Cython編譯成.c的源代碼比。所以,它似乎負載,但

can't find "__ file __" define

這裏是調用堆棧:

[CGPLoad.py] load from file error [Error Message: 

exceptions.NameError:name '__ file __' is not defined 

Traceback: 

init CGPLoad (build/CGPLoad.c:3054): CGPLoad.py(# 19) 

init LogInOutShell (build/LogInOutShell.c:3089): LogInOutShell.py(# 20) 

init CommonToolShell (build/CommonToolShell.c:6560): CommonToolShell.py(# 19) 

init GameWorld (build/GameWorld.c:2516): GameWorld.py(# 19) 

init IPY_GAMEWORLD (build/IPY_GAMEWORLD.c:27700): IPY_GAMEWORLD.py(# 28) 

IPY_GAMEWORLD.swig_import_helper (build/IPY_GAMEWORLD.c:4304): IPY_GAMEWORLD.py(# 18) 

] 

蟒蛇來源:

fp, pathname, description = imp.find_module('_IPY_GAMEWORLD', [dirname(__ file __)]) 

什麼問題,如何解決?

+0

看起來你有__'和'FILE'之間'空間。 – Kevin

+1

呃...如果靠近它不能顯示「__」,那是「__file__」 – sentball

回答

4

這是打算的行爲,因爲__file__沒有爲編譯的可執行文件定義。您應該檢查這種情況下,與

getattr(sys, 'frozen', False) 

,並採取相應的行動,例如:

if getattr(sys, 'frozen', False): 
    __file__ = os.path.dirname(sys.executable) 
+0

謝謝,我發現文章http://bugs.python.org/issue13429 – sentball

+0

看來,.so使用「 __file__「,在Python 3.6.1中初始化爲 – sentball

1

如果你只需要獲得用Cython模塊封裝根路徑,但__file__不是由於定義Python的錯誤http://bugs.python.org/issue13429,那麼你可以通過引用__init__.py使用一個簡單的一招:

def get_package_root(): 
    from . import __file__ as initpy_file_path 
    return os.path.dirname(init‌​py_file_path) 
+0

之前,這也不起作用。報告一個錯誤:'''Traceback(最近調用最後一個): init main中的文件「main.py」,第94行(.. \ .. \ main.c:3617) 文件「main.py」,第6行,在main.get_package_root(.. \ .. \ main.c:1237)中 super().__ init __(ismain = True,uni_theme = True) ImportError:無法導入名稱__file__'''' – Andry