我目前在使用Atom运行我的python代码时遇到一些困难,否则在通过命令提示符启动时可以正常工作。对于那些不熟悉Udacity的机器学习入门的人,“电子邮件预处理”模块位于“ ... \ naive_bayes \ tools”目录中。
代码:
import sys
from time import time
sys.path.append("../tools/")
from email_preprocess import preprocess
每当我运行 通过使用以下命令的命令提示符 nb_author_id.py 文件:
python2 nb_author_id.py
在 D:\ Misiek \ Pulpit \ python \ ud120-projects-master \ naive_bayes 目录中,它可以正常工作。但是,如果要通过Atom运行 nb_author_id.py 文件(使用atom-runner),则会收到错误消息:
Traceback (most recent call last):
File "D:\Misiek\Pulpit\python\ud120-projects-master\naive_bayes\nb_author_id.py", line 17, in <module>
from email_preprocess import preprocess
ImportError: No module named email_preprocess
有什么想法为什么可以通过命令提示符而不是通过Atom起作用?
答案 0 :(得分:0)
将该目录添加到您的PYTHONPATH环境变量中,这样就不必从同一目录导入该目录。通过添加D:\Misiek\Pulpit\python\ud120-projects-master\naive_bayes;
答案 1 :(得分:0)
最好不要在sys.path
中使用相对路径。您永远都不知道程序运行时当前目录将是什么。从Atom运行时,最有可能的是当前目录不在从命令行运行时的目录。
如果需要相对于要从中导入模块的目录找到一个模块,请尝试以下方法(按列出的顺序)找到它并将其添加到sys.path中:
myfile = globals().get("__file__")
(如果是通过IDE加载的,则可以从导入的模块或主程序中运行,除非它是通过IDE或其他任何方式(直接从命令行加载的))。如果此操作返回一个值,请在您的路径中添加os.path.dirnme(myfile)
(或它的派生词,视需要而定)。os.path.dirname(sys.argv[0])
(仅适用于您的主模块)