Python работает в PyCharm, но не с терминала

Недавно я выяснил, как импортировать модули для unittesting в python. В качестве решения этого я использую:

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from Dev.test import someclass

Это отлично работает при работе в PyCharm, и я получаю ожидаемый результат. Однако, когда я бегу от терминала, я сталкиваюсь с ошибкой:

ImportError: No module named Dev.test

У меня есть файлы init, где они должны быть, но я потерял, почему это работает в PyCharm, но не с терминала. Я не изменил свой путь или что-то еще в PyCharm, поскольку этот код должен работать с минимальными изменениями на других машинах. Любая идея о том, почему это происходит и что я могу сделать, чтобы исправить это?

Моя структура папок выглядит следующим образом

-Current
-Dev
 -__init__.py
 -test
  - __init__.py
  -someclass.py
  -Tests
   -__init__.py
   -someunittest.py

Я попытался запустить someunittest из основной папки, а также с полным путем, но он работает только в PyCharm

Ответ 1

При запуске script из PyCharm он запускает его в среде с PYTHONPATH, установленной в список всех папок, помеченных как "Sources Root" (с пиктограммой синей папки) в проводнике проекта.

За пределами PyCharm PYTHONPATH обычно не устанавливается. Первая запись в sys.path относится к текущему рабочему каталогу, из которого был запущен script. Пока вы запускаете свой script с рабочим каталогом вашего терминала в качестве папки, содержащей Dev, он должен иметь возможность находить модуль Dev.test, вне зависимости от дополнительной записи, добавленной в sys.path.

Как только вы вернете рабочий каталог, вы сможете удалить sys.path hack.

Ответ 2

sys.path.append(os.getcwd()[:os.getcwd().index('Dev')])

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

Ответ 3

У меня тоже была эта проблема - и настройка PYTHONPATH, установленная PyCharm, по-видимому, была проблемой.

Моя альтернатива (поскольку я почти закончил писать код) состояла в том, чтобы сгенерировать setup.py - и установить классы/структуру в моей локальной виртуальной среде python.

Надеюсь, что это поможет.

Ответ 4

Я бы порекомендовал попробовать $ pip install . в вашем исходном каталоге. Это установит ваши собственные пакеты для вашего проекта.

Ответ 5

У меня была аналогичная проблема. Я думаю, проблема в том, что Pycharm модифицирует PYTHONPATH, поэтому перед запуском script:

  • cd к файлу, в котором находится файл python
  • выполнить экспорт PYTHONPATH =.
  • запустите script

Вы также можете создать "основной" файл python, где вы устанавливаете путь python, а затем вызываете другие модули