У меня есть проект Python, структурированный так:
repo_dir/
----project_package/
--------__init__.py
--------process.py
--------config.py
----tests/
--------test_process.py
__init__.py
пуст
config.py
выглядит так:
name = 'brian'
USAGE
Я использую библиотеку, запустив python process.py
из каталога project/project/
или указав путь к файлу python абсолютно.Я использую Python 2.7 в Amazon EC2 Linux.
Когда process.py
выглядит как показано ниже, все работает нормально и process.py
печатает brian
.
import config
print config.name
Когда process.py
выглядит как ниже, я получаю ошибку ImportError: No module named project.config
.
import project.config
print config.name
Когда process.py
выглядит как ниже, я получаю ошибку ImportError: No module named project
.Это имеет смысл, так как следует ожидать того же поведения, что и в предыдущем примере.
from project import config
print config.name
Если я добавлю эти строки в process.py
, чтобы включить корневой каталог библиотеки в sys.path
, все конфигурации выше работают нормально.
import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
МОЯ КОНФУЗИЯ
Многие ресурсы предлагают настроить библиотеки python для импорта модулей с использованием project.module_name
, но не похоже, что sys.path
добавлениестандарт, и кажется странным, что мне это нужно.Я вижу, что приложение sys.path добавило мой корень библиотеки в качестве пути в sys, но я подумал, что именно это должен был делать __init__.py
в корне моей библиотеки.Что дает?Что мне не хватает?Я знаю, что импорт Python создает много головной боли, поэтому я постарался максимально упростить это, чтобы обернуть голову вокруг него.Я схожу с ума, и сегодня пятница перед праздником.Я в замешательстве.Пожалуйста, помогите !!
ВОПРОСЫ
Как мне настроить мои библиотеки?Как я должен импортировать пакеты?Где я должен иметь __init__.py
файлы?Нужно ли добавлять корень библиотеки в sys.path в каждом проекте?Почему это так запутанно?