2016-06-07 86 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之类的内容,以便始终知道与其他模块的相对路径。