2016-06-07 111 views
2

這是我的模塊的目錄結構: Directory StructurePython無法從命令行運行模塊; IPython的可

如可以看到的,DataProcessor是一個模塊在其內部具有DataLoader某些功能。

lda模塊內部,文件HFT.py有從數據處理器進口的DataLoader行

我試圖從主目錄274-Yelp/

python lda/HFT.py
本提供了以下錯誤運行lda/HFT.py

Traceback (most recent call last): 
    File "lda/HFT.py", line 6, in <module> 
    from DataProcessor import DataLoader 
ImportError: No module named DataProcessor 

但是,當我運行
ipython lda/HFT.py
它運行!

我使用位於主目錄中的virtualenv 274-Yelp/

有人能告訴我爲什麼IPython都可以導入模塊,但正常的Python解釋器不能?

DataProcessor/__init__.py內容:的lda/__init__.py

import DataLoader 
import MatrixConstructor 
import ReviewProcessor 
import vocabBuilder 

內容:

從ReviewModel IM

port ReviewModel 
from RatingModel import RatingModel 
from HFT import HFT 
+0

如果你做了哪個python和哪個ipython有什麼結果? – user2097159

+0

你可以在'DataProcessor'模塊和'lda'模塊中指定'init.py'的內容嗎? – Tanu

+0

嘗試在'lda/HFT.py'文件中添加'sys.path.append(DataProcessor模塊的絕對路徑)'從DataProcessor導入DataLoader'語句之前的頂部。 – Tanu

回答

0

您的Python腳本路徑計算受着初始化或CD目錄,或你的ipython實際上是啓動一個不同的python二進制文件。鑑於你的ipython指向你的virtualenv目錄,我猜它是前者。

正常情況下,您正在運行的目錄會被添加到sys.path中,但您可能會從給定屏幕截圖的Eclipse中運行此目錄。每個運行都有自己的當前目錄設置,您可以在運行設置下進行配置。

您可能已將工作目錄添加到您的.ipython文件(通過ipython locate找到),這隻會幫助ipython運行。

要修復此問題,請將項目根目錄的路徑添加到兩個init文件的頂部,作爲​​,或者將相互導入from ..DataProcessor import DataLoader的單獨模塊合併到一個模塊中。這要求共享父目錄具有__init__.py文件,但允許運行諸如python -m shareddir.lda.HFT之類的內容,以便始終知道與其他模塊的相對路徑。