这是我的模块的目录结构: Directory Structure
可以看出,DataProcessor
是DataLoader
具有某些功能的模块。
在lda
模块中,文件HFT.py
具有该行
从DataProcessor导入DataLoader
我正在尝试从主目录lda/HFT.py
274-Yelp/
python 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
它运行了!
我正在使用位于主目录274-Yelp/
有人能告诉我为什么Ipython可以导入模块,但普通的Python解释器不能吗?
DataProcessor/__init__.py
的内容:
import DataLoader
import MatrixConstructor
import ReviewProcessor
import vocabBuilder
lda/__init__.py
的内容:
port ReviewModel
from RatingModel import RatingModel
from HFT import HFT
答案 0 :(得分:0)
您的python脚本的路径计算受初始化程序或cd目录的影响,或者您的ipython实际上是启动了不同的python二进制文件。鉴于你的ipython指向你的virtualenv目录,我猜它是前者。
通常情况下,您运行的目录会添加到sys.path
中,但是看起来您可能会在给定屏幕截图的情况下从Eclipse运行此目录。对于您可以在运行设置下配置的每个运行,它都有自己的当前目录设置。
您可能已将工作目录添加到.ipython文件中(通过ipython locate
找到),这只会帮助ipython运行。
要解决此问题,请将项目根目录的路径作为sys.path.insert(1, 'my/root/path')
添加到两个init文件的顶部,或者将单独的模块合并到具有相对导入from ..DataProcessor import DataLoader
的单个模块中。这要求共享父目录具有__init__.py
文件,但允许运行类似python -m shareddir.lda.HFT
的内容以始终了解其他模块的相对路径。