Python无法从命令行运行模块; IPython可以

时间:2016-06-07 16:05:36

标签: python python-2.7

这是我的模块的目录结构: Directory Structure

可以看出,DataProcessorDataLoader具有某些功能的模块。

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/

中的virtualenv

有人能告诉我为什么Ipython可以导入模块,但普通的Python解释器不能吗?

DataProcessor/__init__.py的内容:

import DataLoader
import MatrixConstructor
import ReviewProcessor
import vocabBuilder

lda/__init__.py的内容:

来自ReviewModel im

port ReviewModel
from RatingModel import RatingModel
from HFT import HFT

1 个答案:

答案 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的内容以始终了解其他模块的相对路径。