5

情况是:

python嵌入到ios应用程序(libpython2.7.a)中,所有逻辑都由python编写,一些api支持通过swig wrap调用,如果python是py(c,o)一切都很好但是太慢了,我想加快速度比我使用 cython 编译到 .c 源而不是 .so,它似乎加载但

找不到“__文件__”定义

这是调用堆栈:

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

什么问题,如何解决?

4

2 回答 2

4

这是预期的行为,__file__未为已编译的可执行文件定义。你应该检查这种情况

getattr(sys, 'frozen', False)

并采取相应的行动,例如:

if getattr(sys, 'frozen', False):
    __file__ = os.path.dirname(sys.executable)
于 2013-11-23T23:07:27.253 回答
1

如果您只需要在 Cython 模块中获取包根路径,但由于 Python 错误http://bugs.python.org/issue13429__file__而未定义,那么您可以通过引用使用一个简单的技巧:__init__.py

def get_package_root():
    from . import __file__ as initpy_file_path
    return os.path.dirname(init‌​py_file_path)
于 2016-08-16T13:04:19.577 回答