情况是:
python嵌入ios应用程序(libpython2.7.a),所有逻辑都由python编写,一些api支持通过swig wrap调用,如果python是 py(c,o)一切没问题但是太慢,我想加速比使用cython编译到.c源而不是.so,它似乎加载但是
找不到“__ file __”定义
这是调用堆栈:
[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)
]
python源是:
fp, pathname, description = imp.find_module('_IPY_GAMEWORLD', [dirname(__ file __)])
问题是什么,如何解决?
答案 0 :(得分:4)
这是预期的行为,因为没有为已编译的可执行文件定义__file__
。您应该使用
getattr(sys, 'frozen', False)
并采取相应行动,例如:
if getattr(sys, 'frozen', False):
__file__ = os.path.dirname(sys.executable)
答案 1 :(得分:1)
如果您只需要在Cython模块中获取包根路径,但由于Python错误http://bugs.python.org/issue13429而未定义__file__
,那么您可以通过引用{{1}来使用一个简单的技巧}:
__init__.py