2016-10-08 74 views
0

爲了讓自己在自己的項目中明確filestructure我用下面的代碼片段到項目主文件夾動態地添加到PYTHONPATH,因此保證我可以從上面甚至導入文件一個文件位置。動態更新PYTHONPATH防止.pyc文件更新

import sys 
import os 
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), ".")) 

因爲我這樣做,當我開始我的主文件,更改模塊不再被認可,直到我手動刪除任何pyc文件。因此,我認爲這是由於某種原因阻止python檢查pyc文件是否是最新的。我能以任何方式解決這個問題嗎?

回答

1

你可以試着讓python不寫這些* .pyc文件。

How to avoid .pyc files?

對於大型項目,這將略微從性能的角度關係。有可能你不關心這一點,然後你可以不創建pyc文件。

+0

稱其爲包的一部分,如果有任何心不是更優雅的解決方案,我會嘗試。雖然我想明白爲什麼會發生這種情況。 – weidler

+0

'sys.modules'包含解釋器加載的模塊。如果你正在修改PYTHONPATH並且一些新的模塊會覆蓋已經存在的模塊,那麼新的變化將不會被看到 - 可能。無論如何,你不應該像這樣使用魔法。只需將PYTHONPATH設置爲儘可能高的文件層次結構,然後完成。另外,你應該使用virtualenv來安裝你的項目和其他依賴項,並且爲更復雜的東西安裝setup.py入口點。你有一個項目是從一個簡單的腳本發展而來,你從來沒有重構過它嗎? –

1

如果模塊名稱不再是唯一的,那麼添加已導入模塊的路徑可能會導致您遇到麻煩。想想看,你做import foo,這增加了其父包barsys.path - 它現在可能也做import bar.foo。 Python會將兩者都視爲不同的模塊,這可能會混淆任何依賴模塊標識的東西。

你真的應該考慮爲什麼你需要做的這個技巧在首位。如果你有放置在您的包內的可執行文件,你不應該做

cd bardir/bar 
python foo 

而是通過

cd bardir 
python -m bar.foo