下面是我的模块的目录结构:Directory Structure
可以看出,DataProcessor是一个模块,DataLoader在其中具有特定的功能。
在lda模块内部,文件HFT.py包含来自DataProcessor导入DataLoader的行
我正在尝试从主目录274-Yelp/运行lda/HFT.py
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 vocabBuilderlda/__init__.py的内容:
来自ReviewModel im
port ReviewModel
from RatingModel import RatingModel
from HFT import HFT发布于 2016-06-08 05:38:41
python脚本的路径计算受到初始化器或cd目录的影响,或者您的ipython实际上正在启动不同的python二进制文件。假设您的ipython指向您的virtualenv目录,我猜是前者。
通常,为了您的利益,您运行的目录会添加到sys.path中,但是根据屏幕截图,看起来您可能是在Eclipse中运行此目录。对于每次运行,都有自己的当前目录设置,您可以在运行设置下配置这些设置。
您可能已经将工作目录添加到您的.ipython文件(通过ipython locate找到)中,这只会帮助ipython运行。
要解决此问题,可以将项目根目录的路径作为sys.path.insert(1, 'my/root/path')添加到两个初始化文件的顶部,或者使用相对导入from ..DataProcessor import DataLoader将单独的模块合并到单个模块中。这要求共享的父目录有一个__init__.py文件,但允许运行像python -m shareddir.lda.HFT这样的东西,以始终知道其他模块的相对路径。
https://stackoverflow.com/questions/37684228
复制相似问题