Python работает в PyCharm, но не из терминала
Недавно я понял, как импортировать модули для тестирования юнитов в 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
У меня есть файлы инициализации, где они должны быть, но я заблудился, почему это работает в PyCharm, а не из терминала. Я не изменил свой путь или что-либо еще в PyCharm, так как этот код должен работать с минимальными изменениями на других машинах. Любая идея о том, почему это происходит и что я мог бы сделать, чтобы это исправить?
Моя структура папок выглядит следующим образом
-Current
-Dev
-__init__.py
-test
- __init__.py
-someclass.py
-Tests
-__init__.py
-someunittest.py
Я попытался запустить someunittest из основной папки, а также с полным путем, но он работает только в PyCharm
8 ответов
При запуске скрипта из PyCharm он запускается в среде с PYTHONPATH
установите список всех папок, помеченных как "Sources Root" (с синим значком папки) в проводнике проекта.
Вне PyCharm, PYTHONPATH
обычно не устанавливается. Первая запись в sys.path
ссылается на текущий рабочий каталог, из которого был запущен скрипт. Пока вы запускаете скрипт с рабочим каталогом вашего терминала, как папка, содержащая Dev
, он должен быть в состоянии найти Dev.test
модуль, независимо от дополнительной записи, добавленной в sys.path
,
Как только вы получите правильный рабочий каталог, вы сможете удалить sys.path
хак.
У меня тоже была эта проблема - и установка PYTHONPATH, установленная PyCharm, казалось, была проблемой.
Моя альтернатива (поскольку я почти закончил писать код) состояла в том, чтобы сгенерировать setup.py - и установить классы / структуру в моей локальной виртуальной среде Python.
Надеюсь это поможет..
sys.path.append(os.getcwd()[:os.getcwd().index('Dev')])
Я добавил это к своим импортам, и это, кажется, решило проблему. Тем не менее, это не похоже на правильный способ сделать это; это будет делать сейчас.
Что @codewarrior сказал о настройке PyCharm своей собственной PYTHONPATH
верно. Но sys.path
не было моего текущего рабочего каталога. Чтобы обойти эту проблему, я обновил свой PYTHONPATH
(или вы можете редактировать sys.path
).
настройка PYTHONPATH
export PYTHONPATH=$PYTHONPATH:`pwd` (OR your project root directory)
обновление sys.path
import sys
sys.path.insert(0,'<project directory>') OR
sys.path.append('<project directory>')
Вы можете использовать вставку / добавление в зависимости от порядка поиска проекта.
НТН.
Pycharm использует виртуальную среду. Когда вы пытаетесь запустить свою программу в своем терминале, эта среда неактивна.
Вам необходимо собрать или загрузить вашу среду Pycharm с вашими библиотеками.cd в каталог project и напишите в терминале:
source venv/bin/activate
Чтобы добавить к подобным ответам здесь, PyCharm делает некоторые дополнительные настройки перед запуском вашего скрипта. Если добавление ваших исходных файлов root в PYTHONPATH не работает, то изучите конфигурацию запуска в PyCharm для рассматриваемого сценария, скорее всего, за кулисами появится еще немного закулисной магии.
Я бы порекомендовал попробовать $ pip install .
в вашем исходном каталоге. Это установит ваши собственные пакеты для вашего проекта.
У меня была похожая проблема. Я думаю, проблема в том, что Pycharm изменяет PYTHONPATH, поэтому перед запуском скрипта:
- перейдите к файлу, в котором находится файл Python
- запустить экспорт PYTHONPATH=.
- запустить скрипт
Вы также можете создать "основной" файл Python, в котором вы устанавливаете путь к Python, а затем вызываете другие модули.