首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python不能从命令行运行模块;IPython可以

Python不能从命令行运行模块;IPython可以
EN

Stack Overflow用户
提问于 2016-06-08 00:05:36
回答 1查看 372关注 0票数 2

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

可以看出,DataProcessor是一个模块,DataLoader在其中具有特定的功能。

lda模块内部,文件HFT.py包含来自DataProcessor导入DataLoader的行

我正在尝试从主目录274-Yelp/运行lda/HFT.py

python lda/HFT.py

这会产生以下错误:

代码语言:javascript
复制
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的内容:

代码语言:javascript
复制
import DataLoader
import MatrixConstructor
import ReviewProcessor
import vocabBuilder

lda/__init__.py的内容:

来自ReviewModel im

代码语言:javascript
复制
port ReviewModel
from RatingModel import RatingModel
from HFT import HFT
EN

回答 1

Stack Overflow用户

发布于 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这样的东西,以始终知道其他模块的相对路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37684228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档