«Не указан модуль ...» с определенной структурой проекта - PullRequest
1 голос
/ 04 июля 2019

У меня следующая структура проекта:

MainScript.py
ExampleFolder
├ MainImport.py
└ SecondaryImport.py

MainScript.py: import ExampleFolder.MainImport
MainImport.py: Import SecondaryImport


Когда я пытаюсь запустить MainImport.py, он не получает ошибок, но когда я пытаюсь запустить MainScript.py, я получаю ошибку импорта, которая говорит No module named 'SecondaryImport'.

Мой вопрос прост - есть ли способ, которым я могу импортировать только MainImport.py из MainScript.py, не получая эту ошибку и не импортируя SecondaryImport.py? Заранее спасибо!

Я также попытался добавить пустой файл с именем __init__.py к ExampleFolder, но ошибка все еще появляется. Я также прочитал официальную документацию Python , но не смог найти проблему. Я что-то пропустил? (

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Я думаю, что использование оператора import ExampleFolder.SecondaryImport будет работать.

Если это произойдет, ошибка может произойти, потому что, как упоминалось в документации, операторы импорта обычно начинают поиск в главном каталоге вашего проекта, куда был вызван интерпретатор python, если ваш модуль не находится в самом python.

Другой способ - использовать оператор относительного импорта, например так: import .secondaryimport, чтобы сказать интерпретатору python, что нужно искать в текущем каталоге. Надеюсь, это поможет!

Просмотр этих ссылок поможет, я думаю (это помогло мне, когда я застрял в подобной проблеме): https://docs.python.org/3/library/sys.html#sys.path https://realpython.com/absolute-vs-relative-python-imports/

0 голосов
/ 04 июля 2019

Я также попытался добавить пустой файл с именем __init__.py в ExampleFolder

Вот так - вы создаете пакет Python из каталога таким образом. А с пакетами у вас есть пространство имен directory.file, где file - это файл Python, также известный как модуль в мире Python.

Тогда вы можете сделать из mainscript.py:

from examplefolder import mainimport

Для импорта из внутреннего пакета вы можете использовать следующий синтаксис внутри mainscript.py:

import secondaryimport

и использовать его в этом mainscript.py как:

sevondaryimport.SomeClass()

или вы можете просто сделать:

from secondaryimport import SomeClass

и используйте его как:

SomeClass()

Кстати, используйте строчные буквы во всех случаях, кроме имен классов - только они должны иметь имена CamelCase.

...