Структура проекта, как создать подпакет, который будет работать независимо? - PullRequest
0 голосов
/ 07 марта 2019

Python 3.6+, структура каталогов:

project/
   main.py
   subpackage/
      submain.py
      config.py

main.py:

from subpackage.submain import attribute1
if __name__ == "__main__":
    print(attribute1)

submain.py:

from config import config_param
attribute1 = 1 + config_param

config.py:

config_param = 100

выдает ошибку:

Traceback (most recent call last):
File "/projects/test/project/main.py", line 1, in <module>
from subpackage.subname import attribute1
File "/projects/test/project/subpackage/subname.py", line 1, in <module>
from config import config_param
ModuleNotFoundError: No module named 'config'

Мы используем пару gitsubmodule в нашем проекте и на данный момент он работает с:

from .config import config_param

но я уверен, что этонеправильное решение, потому что это уже требует, чтобы в какой-то папке / папке / папке создавался относительный импорт, подобный этому ... config или ../../../config.
Я уже потратил неделю, чтобы найти, как это сделать, чтобы подпакет могработать самостоятельно (from config import config_param), любая помощь, ссылки ценю, спасибо

Ответы [ 2 ]

1 голос
/ 07 марта 2019

попробуйте добавить __init__.py файлов в ваши директории https://docs.python.org/3/tutorial/modules.html

0 голосов
/ 07 марта 2019

Одно решение, которое должно работать:

  • Добавить __init__.py в подпакет,
  • Добавьте каталог подпакета в PYTHONPATH, вы также можете сделать это с: sys.path.append(PATH_TO_THE_SUBPACKAGE).

Пакет теперь является частью PYTHONPATH, поэтому вы можете импортировать его, как и любые другие библиотеки, с помощью import config.

...