2013-10-07 103 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__的代碼是在文件的名稱

相關問題