В настоящее время я испытываю некоторые трудности с использованием 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 работает нормально. Но если я хочу запустить файл nb_author_id.py через Atom (с помощью 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?






Лучше не использовать относительные пути в sys.path. Вы никогда не знаете, какой будет текущий каталог при запуске вашей программы. Скорее всего, при запуске из Atom ваш текущий каталог НЕ находится там, где он был при запуске из командной строки.
Если вам нужно найти модуль относительно каталога, в котором модуль, из которого вы пытаетесь его импортировать, попробуйте эти методы (в указанном порядке), чтобы найти его и добавить в sys.path:
myfile = globals().get("__file__") (это будет работать из импортированного модуля или из вашей основной программы, если она была загружена через IDE или любым другим способом, кроме непосредственно из командной строки). Если это возвращает значение, добавьте os.path.dirnme(myfile) (или его производную, если необходимо) к вашему пути.os.path.dirname(sys.argv[0]) (работает только для вашего основного модуля)Да, конечно, сработает. Он ограничивает ваш код конкретным местоположением, которое вы выбрали на своем хосте, но если это единственное место, где вы его запускаете, это нормально.
Если я использую sys.path.append ("D: \ Misiek \ Pulpit \ python \ ud120-projects-mast er \ naive_bayes \ tools"), я все равно получаю ту же ошибку. Понятия не имею почему: c
Если вы используете этот в прямом смысле, он не будет работать, потому что символы \ будут съедены. Либо удвойте их, либо используйте "необработанный" строковый литерал: r"D:\Misiek\Pulpit\python\..." (эта форма сохраняет \ как есть).
Ни sys.path.append ("D: \\ Misiek \\ Pulpit \\ python \\ ud120-projects- master \\ naive_bayes \ \ tools"), ни sys.path.append (r "D: \ Misiek \ Pulpit \ python \ ud120-projects-master \ naive_bayes \ tool s ") работали. :(
Я использую Windows 10, если это важно.
Возможно, это неправильный каталог - проверьте точное место, где находится ваш модуль 'email_preprocess'.
Если лучше не использовать относительные пути в sys.path, не должно работать что-то вроде sys.path.append ("D: \ Misiek \ Pulpit \ python \ ud120-projects-mast er \ naive_bayes \ tools") ?