2013-05-08 43 views
1

我遇到了一個非常奇怪的問題。我已經將一些Python代碼從一個版本更改爲下一代,並且它似乎破壞了代碼(儘管通過了測試)。當我去添加一個調試語句時,代碼開始正常工作。再次嘗試失敗。經過試驗,我意識到只有在pyc文件被更改或刪除之後,它才能在一次運行中運行。什麼??有沒有其他人經歷過這個?任何想法來解決這個問題?Python代碼暫時工作只有當pyc文件改變

tldr:代碼只有在pyc改變或刪除後才能正常工作,然後停止工作。

編輯:它似乎是問題是pyc文件本身。我編譯了pyc文件而沒有運行代碼,並嘗試運行它,它不起作用。 我做了一些研究,我認爲python創建這些pyc的方式是當我嘗試運行它時,它將它加載到環境中,然後創建pyc。這意味着它在從源代碼加載時起作用,但在從pyc加載時失敗。

+0

沒有你的程序有副作用,其活得比過程?文件,FS鎖,數據庫更新?您是在本地運行,還是遠程/網絡驅動器上的任何文件? – shx2 2013-05-08 20:26:10

+0

似乎沒有任何副作用。我正在運行一個ssh終端。 – amustafa 2013-05-08 20:34:22

+0

作爲更新,我從未找到滿意的解決方案。我現在所做的就是不生成pyc文件。我的應用程序在開始時導入一次,並在後臺運行,所以這不是一個問題。 – amustafa 2013-06-19 08:21:43

回答

1

也許您的PYC文件正在通過某種同步進行更新,在編譯後編寫,然後python運行PYC而不是重新編譯PY。

試試這個:

>python --help 
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ... 
Options and arguments (and corresponding environment variables): 
-B  : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x 
+0

我不確定你是什麼意思的同步,但似乎有一些錯誤的pyc,根據我上面的編輯。 – amustafa 2013-05-08 20:38:38

+0

用於同步的同步,如rsync或更新文件的雲存儲。也許CVS?刪除pyc文件,然後使用-B運行python並確保其未創建。如果它是從其他地方創建的(天堂可能?) – beiller 2013-05-08 20:41:06

+0

當我添加-B時,pyc沒有創建,程序工作正常。雖然我不知道添加-B是否是一個長期解決方案。 – amustafa 2013-05-08 21:09:41