Подтвердить что ты не робот

SystemError: родительский модуль '' не загружен, не может выполнять относительный импорт

У меня есть следующий каталог:

myProgram
└── app
    ├── __init__.py
    ├── main.py 
    └── mymodule.py

mymodule.py:

class myclass(object):

def __init__(self):
    pass

def myfunc(self):
    print("Hello!")

main.py:

from .mymodule import myclass

print("Test")
testclass = myclass()
testclass.myfunc()

Но когда я его скомпилирую, я получаю эту ошибку:

Traceback (most recent call last):
  File "D:/Users/Myname/Documents/PycharmProjects/myProgram/app/main.py", line 1, in <module>
    from .mymodule import myclass
SystemError: Parent module '' not loaded, cannot perform relative import

Это работает:

from mymodule import myclass

Но я не получаю автоматическое завершение при вводе этого сообщения и появляется сообщение: "неразрешенная ссылка: mymodule" и "неразрешенная ссылка: myclass" И в моем другом проекте, над которым я работаю, я получаю сообщение об ошибке: "ImportError: нет модуля с именем" mymodule "

Что я могу сделать?

4b9b3361

Ответ 1

У меня была та же проблема, и я решил ее использовать абсолютный импорт вместо относительного.

например, в вашем случае, вы напишете что-то вроде этого:

from app.mymodule import myclass

Вы можете видеть в документации.

Обратите внимание, что относительный импорт основан на имени текущего модуль. Поскольку имя основного модуля всегда "__main__", модули, предназначенные для использования в качестве основного модуля приложения Python должен всегда использовать абсолютный импорт.

Ответ 2

если вы просто запустите main.py под app, просто импортируйте, например

from mymodule import myclass

если вы хотите вызвать main.py в другой папке, используйте:

from .mymodule import myclass

например:

├── app
│   ├── __init__.py
│   ├── main.py
│   ├── mymodule.py
├── __init__.py
└── run.py

main.py

from .mymodule import myclass

run.py

from app import main
print(main.myclass)

Итак, я думаю, что основной вопрос о вас - это вызов app.main.

Ответ 3

Обычно я использую это обходное решение:

try:
    from .mymodule import myclass
except Exception: #ImportError
    from mymodule import myclass

Это означает, что ваша IDE должна забрать правильное местоположение кода, а интерпретатору python удастся запустить ваш код.

Ответ 4

Если вы перейдете на один уровень вверх при запуске script в командной строке оболочки bash, проблема будет решена. Для этого используйте команду cd .., чтобы изменить рабочий каталог, в котором будет работать ваш script. Результат должен выглядеть следующим образом:

[[email protected] myProgram]$

вместо этого:

[[email protected] app]$

Как только вы там, вместо запуска script в следующем формате:

python3 mymodule.py

Измените его так:

python3 app/mymodule.py

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