2013-10-07 8 views
14

Converto il mio codice Python in c da cython e poi compilo il file .c e uso .so nel mio progetto. Il mio problema: Io uso __file__ nel mio codice Python e mentre compilato da gcc, non riceve errore. ma quando eseguo programmi e import .so in altri file python, viene visualizzato un errore dalla riga __file__.Quale metodo posso usare al posto di __file__ in python?

Come può risolvere questo problema? C'è qualche metodo da sostituire con __file__?

+1

Per cosa lo usi? – poke

risposta

9

tenta di aggiungere questo all'inizio del file:

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

Questo funziona solo per i frame Python con stack di codice, ** non ** per le estensioni C. –

+3

Se hai solo bisogno di ottenere un percorso root del pacchetto nel modulo Cython, ma '__file__' non è definito a causa del bug Python http://bugs.python.org/issue13429, allora puoi usare un trucco semplice facendo riferimento a' __init__ .py': 'def get_package_root(): da. importa __file__ come initpy_file_path; return os.path.dirname (initpy_file_path) ' –

+0

@MartijnPieters qual è il tuo suggerimento per le estensioni C? – denfromufa

0

Non troppo sicuro di come si renderà python compatibile, ma gcc #define s __FILE__ per il nome del file che il codice è in

.