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, а затем вызываете другие модули