python'__ file__'未定义

时间:2013-10-28 09:03:14

标签: python c python-2.7

情况是:

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 __)])

问题是什么,如何解决?

2 个答案:

答案 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