Модуль Python ведет себя при запуске в одиночку, но не при импорте как часть оболочки - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь написать оболочку для пакета, который я создал

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

package1
|--__init__.py (blank)
|--module1.py
|--module2.py
|--module3.py

package2
|--module4.py

package1.module1:

import module2
from module3 import *

def main():
  # Do some stuff
  module2.doSomeModule2Stuff()

if __name__ == "__main__":
  main()

package2.module4:

import package1

def main():
  package1.module1.main()

Я установил package1 локально, используя python -m pip install -e package1, чтобы я мог импортировать его в package2

При запускеpython module1.py (в каталоге package1), он работает нормально без проблем.

Когда я запускаю python module4.py (в каталоге package2), я получаю:

Traceback (most recent call last):
File "module4.py", line 3, in <module>
  package1.module1.main()
AttributeError: module 'package1' has no attribute 'module1'

Чтомне нужно изменить package1, чтобы я мог использовать его в package2 таким образом?

Редактировать 1

Изменение import package1 на import package1.module1 теперь приводит к следующемуошибка

Traceback (most recent call last):
File "module4.py", line 1, in <module>
    import package1.module1
File "/home/ben/Documents/package1/package1/module1.py", line 1, in <module>
    import module2
ImportError: No module named 'module2'

1 Ответ

0 голосов
/ 03 октября 2018

При импорте пакета автоматически не импортируются все его подмодули, поэтому import package1 не обязательно достаточно для доступа к package1.module1.Попробуйте:

import package1.module1

Вы также можете сделать:

from package1 import module1

def main():
    module1.main()

или

from package1.module1 import main

def my_main():  # names of mains must be different
    main()
...