2009-11-22 31 views
1

我的一個Python腳本以交互模式運行,但在從命令行運行時失敗。區別在於,從命令行運行時,它從錯誤的.egg文件導入模塊,並且在交互式運行時,它會在當前目錄中使用我的固定(解壓縮)版本。當以交互方式/非交互方​​式運行時,Python以不同方式導入模塊

我的問題有兩方面:1)爲什麼Python的加載模塊不同於這些位置運行時,和b)什麼是我的選擇來解決它?

+0

在純Python或IPython中運行交互式會話嗎?後者可能有不同的PYTHONPATH和導入規則。 –

回答

1

我不明白你在交互模式下運行腳本意味着什麼,所以我不能準確地說。但在交互模式下尋找模塊(sys.path[0])的第一個地方是當前目錄(即使調用os.chdir()也會影響導入),而對於腳本,它是腳本所在的目錄(源自sys.argv[0])。請注意,當腳本從它所在的目錄運行時,它們實際上是相同的,但在其他情況下可能不同。希望這可以幫助。

+0

感謝丹尼斯。原來這是問題 - 請參閱下面的評論。 – Dan

2

在UNIX系統和Mac OS-X:

  • 你有~/.python-eggs目錄?

獨立於操作系統:

  • 你確定你在這兩種情況下使用相同的Python實例?

  • 您可以打印每個案件sys.path,看看哪個包目錄中首先出現的模塊搜索路徑?

+0

謝謝fviktor。我沒有〜/ .python-eggs目錄,但是這是一個PYTHONPATH問題。由於將解壓縮版本添加到我的路徑中並未解決此問題(因爲.egg文件仍然是首先加載的),所以我剛剛刪除了.egg。 – Dan

+0

現在我記得。當我不得不修復從egg文件安裝的Trac擴展時,我有類似的問題。以非壓縮的形式安裝egg包允許我在安裝後更改該包中的源代碼。但是,如上所述,egg文件必須從site-packages目錄中刪除,否則它優先於解壓縮的源代碼樹。 可以在解壓縮形式安裝雞蛋是這樣的: easy_install.py --always-解壓package_to_install.egg 文檔: 的easy_install --help – fviktor

1

一)爲什麼Python的加載模塊不同,當從這些位置 B)我有哪些選擇來解決它運行?

檢查您的環境變量PYTHONPATH。當python導入模塊時,它會搜索這些目錄。解決問題的一種方法是將本地文件夾「當前目錄中的(解壓縮)版本」添加到PYTHONPATH的開頭,以便Python首先找到它。

+0

謝謝,LNK2019。即使將本地解壓縮的版本添加到PYTHONPATH中也沒有解決問題,因爲.egg文件在我設置在我的.profile中的PYTHONPATH之前。儘管刪除壞的.egg文件已經完成了它的處理。 – Dan

相關問題