2013-10-07 100 views
14

我通过cython将我的python代码转换为c,之后编译.c文件并在我的项目中使用.so。 我的问题: 我在我的python代码中使用__file__,而在通过gcc编译时,它不会收到错误。但是当我运行程序并在其他python文件中导入.so时,从__file__行出现错误。我可以用什么方法代替python中的__file__?

如何解决这个问题?有没有什么方法可以替代__file__

+1

你用它做什么? – poke

回答

9

尝试在你的文件的开头补充一点:

import inspect 
if not hasattr(sys.modules[__name__], '__file__'): 
    __file__ = inspect.getfile(inspect.currentframe()) 
+3

只适用于Python代码栈帧,**不适用于C扩展。 –

+3

如果您只需要在Cython模块中获取包根路径,但由于Python bug http://bugs.python.org/issue13429没有定义'__file__',那么您可以通过引用'__init__来使用简单的技巧.py':'def get_package_root():from。将__file__导入为initpy_file_path;返回os.path.dirname(initpy_file_path)' –

+0

@MartijnPieters你对C扩展的建议是什么? – denfromufa

0

不太清楚你将如何让蟒蛇兼容,但GCC #define小号__FILE__的代码是在文件的名称

相关问题