Почему бы не импортировать Python - PullRequest
0 голосов
/ 08 июня 2018

Существует такая структура приложения, где myapp является корневым каталогом, а два "параллельных" пакета "app" и "package1":

myapp

  app
     __init__.py
     app.py

  package1
     __init__.py
     my_file.py

  __init__.py

* Примечание: последний __init__.py находится в корневом каталоге.каталог "myapp"

Теперь в app.py , если я попытаюсь импортировать my_file.py

from ..package1 import my_file as my_variable

Затем я получаю эту ошибку:

ImportError: attempted relative import with no known parent package

Я исследовал и нашел возможное решение здесь:

Как решить ImportError: попытка относительного импортас неизвестным родительским пакетом

Я хотел бы применить «Решение 1», но точно не понимаю , где я должен поставить main.py и который будет его внутренним кодом или, если, наоборот, это может быть пустой файл, например __init__.py

1 Ответ

0 голосов
/ 08 июня 2018

У вас должна быть run функция в app.py:

def run():
    # .... You code that should run as app

Не должно быть никакого автоматического кода запуска в app.py

main.py должно быть на том же самомпапка как myapp:

myapp
  app
     __init__.py
     app.py

  package1
     __init__.py
     my_file.py

  __init__.py
main.py

Теперь main.py должен содержать что-то вроде этого:

from myapp.app import app

app.run()

, и вы можете запустить его python main.py

Альтернативный варианттакже можно поместить файл __main__.py в myapp:

myapp
  app
     __init__.py
     app.py

  package1
     __init__.py
     my_file.py

  __init__.py
  __main__.py

__main__.py должен содержать что-то вроде этого:

from .app import app

app.run()

Вы не можете запустить его следующим образом python -m myapp

...