#python #package #python-import
Вопрос:
Я следую этому руководству, чтобы узнать, как структурировать хороший проект: Структурирование вашего проекта. И у меня возникли проблемы с импортом модулей из разных папок. Мой проект структурирован следующим образом:
project
│ .gitignore
│ LICENSE
│ Makefile
│ README.md
│
├───project
│ main.py
│ __init__.py
│
└───tests
context.py
var_class.py
__init__.py
Во main.py
мне есть
# main.py
class Var():
pass
В context.py
я следовал приведенному выше руководству, поэтому я:
# context.py
import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import project
Во var_class.py
мне есть:
# var_class.py
from .context import project
x = project.main.Var()
Запускаю последний, который я получаю:
$ python var_class.py
Traceback (most recent call last):
File "c:UsersMatteoDocumentsprojecttestsvar_class.py", line 1, in <module>
from .context import pierre
ImportError: attempted relative import with no known parent package
Что я делаю не так? Спасибо всем, кто мне поможет.
Комментарии:
1. Попробуйте добавить
__init__.py
файл в родительскуюproject
папку. Он пытается импортироватьcontext
из своего родительского пакета, которого не существует.2. @koorkevani это не решило проблему, произошла та же ошибка
3. Попробуйте изменить строку на
from ..context import project
(сохраняя__init__.py
при этом )4. @koorkevani все еще испытывает ту же проблему
5. нашел проблему.
__init__.py
не требуется, как и двойной период. Однако вам нужно запустить его с-m
флагом, чтобы сообщить python, что существует локальная иерархия модулей. Затем введите свой верхнийproject
режpython3 -m tests.var_class
. (или реж. над верхомproject
, иpython3 -m project.tests.var_class
). Ошибка все еще есть, но она происходит изproject/__init__.py
-за того, что не выполняется автоматический импортmain
. Добавьте к этому строкуfrom . import main
, и все готово.