Ошибка модуля с именем email_preprocess при использовании Atom

В настоящее время я испытываю некоторые трудности с использованием 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?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
815
2

Ответы 2

Добавьте этот каталог в переменную среды PYTHONPATH, чтобы его не нужно было импортировать из того же каталога. Добавьте этот каталог в конец, добавив D:\Misiek\Pulpit\python\ud120-projects-master\naive_bayes;

Editing System PYTHONPATH

Лучше не использовать относительные пути в sys.path. Вы никогда не знаете, какой будет текущий каталог при запуске вашей программы. Скорее всего, при запуске из Atom ваш текущий каталог НЕ находится там, где он был при запуске из командной строки.

Если вам нужно найти модуль относительно каталога, в котором модуль, из которого вы пытаетесь его импортировать, попробуйте эти методы (в указанном порядке), чтобы найти его и добавить в sys.path:

  • myfile = globals().get("__file__") (это будет работать из импортированного модуля или из вашей основной программы, если она была загружена через IDE или любым другим способом, кроме непосредственно из командной строки). Если это возвращает значение, добавьте os.path.dirnme(myfile) (или его производную, если необходимо) к вашему пути.
  • os.path.dirname(sys.argv[0]) (работает только для вашего основного модуля)

Если лучше не использовать относительные пути в sys.path, не должно работать что-то вроде sys.path.append ("D: \ Misiek \ Pulpit \ python \ ud120-projects-mast‌ er \ naive_bayes \ tools‌") ?

Meehaw 14.08.2018 20:46

Да, конечно, сработает. Он ограничивает ваш код конкретным местоположением, которое вы выбрали на своем хосте, но если это единственное место, где вы его запускаете, это нормально.

Leo K 14.08.2018 21:21

Если я использую sys.path.append ("D: \ Misiek \ Pulpit \ python \ ud120-projects-mast‌ er \ naive_bayes \ tools‌"), я все равно получаю ту же ошибку. Понятия не имею почему: c

Meehaw 14.08.2018 21:34

Если вы используете этот в прямом смысле, он не будет работать, потому что символы \ будут съедены. Либо удвойте их, либо используйте "необработанный" строковый литерал: r"D:\Misiek\Pulpit\python\..." (эта форма сохраняет \ как есть).

Leo K 14.08.2018 21:37

Ни 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 ") работали. :(

Meehaw 14.08.2018 21:40

Я использую Windows 10, если это важно.

Meehaw 14.08.2018 21:49

Возможно, это неправильный каталог - проверьте точное место, где находится ваш модуль 'email_preprocess'.

Leo K 15.08.2018 00:49

Другие вопросы по теме