Относительный импорт Python "выше верхнего уровня" - PullRequest
0 голосов
/ 30 мая 2018

Это моя структура каталогов

src\
  dirCode\
    dirSubCode\
      test.py
  Django\
    DjangoApp\
      Home\
       views.py

Из views.py я пытаюсь импортировать класс (назовем его Main) из test.py.Строка в test.py просто

from dirCode.dirSubCode.test import Main

, и я получаю ошибку ModuleNotFoundError, когда пытаюсь запустить сервер.Я распечатал os.sys.path и вторые точки входа в 'src \', в то время как первая запись просто ''.Поскольку это не единственное приложение, из которого мне нужно будет вызывать «внешний» код, я стараюсь избегать жесткого кодирования

sys.path.insert(0,'path\to\src\dirCode\dirSubCode\')

, если это вообще сработает.Я пытался просмотреть документацию, посмотреть другие вопросы StackOverflow ( Импорт модуля из подпапки ) и т. Д., Но я не знаю, как это сделать.Я попытался зайти в каталог src \ Django \ DjangoApp \ Home и просто запустить консоль python и просто попытаться импортировать класс, но это выдает мне ту же ошибку.

Одна странная разработка, которую я выполняюв том, что когда я пытаюсь запустить его из подсказки Anaconda (да, я использую Windows), он не работает, но когда я запускаю файл в PyCharm, он работает.Если это поможет дать некоторое представление о том, что может происходить, я буду признателен за помощь.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Я считаю, что вам нужно установить переменную PYTHONPATH, которая используется для установки пути поиска по умолчанию для модулей.

https://docs.python.org/2/using/cmdline.html#envvar-PYTHONPATH

В соответствии с документами Python синтаксисвот так ...

https://docs.python.org/3.6/using/windows.html#excursus-setting-environment-variables

Чтобы временно установить переменные среды, откройте командную строку и используйте команду set:

C:\>set PATH=C:\Program Files\Python 3.6;%PATH%
C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib
C:\>python

Pycharm - в конфигурации Run / Debug - устанавливает его, когда вы его отметили (по умолчанию).

pycharm image

0 голосов
/ 30 мая 2018

Правильный способ сделать это - представить общий пакет, который вы можете установить в virtualenv для каждого веб-приложения.Либо из реального выпуска, либо с помощью

python setup.pyvelop

Форма в общем пакете вы по существу создаете символическую ссылку в venv, которая позволяет вам простоИмпортировать.

Более современная и простая версия -

pip install -e.

внутри библиотеки.См. Python setup.py разработка и установка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...