Пакеты «внутри» модулей

У меня растет количество скриптов, составляющих программу, которую я пишу, и я решил, что пришло время очистить мое дерево исходных текстов и упаковать их. правильно. Я уверен, что это простой вопрос, но я не могу понять, как это сделать.

Если у меня есть группа модулей, которые подходят друг к другу, но один должен быть модулем верхнего уровня, а другие должны иметь префикс имени модуля, но фактически переходят в пакеты более низкого уровня, как я могу это сделать.

Например, я хотел иметь возможность импортировать мои данные и получать все мои данные. но я также могу импортировать mystuff.test.test1 . Я думал, что создам такое дерево исходных текстов,

myprogram/
    mystuff.py
    mystuff/
        __init__.py
        tests/
            __init__.py
            test1.py
            test2.py
            ...

Но в этом случае кажется, что mystuff / всегда имеет приоритет над mystuff.py , поэтому import mystuff ничего не делает (пока mystuff / __ init __. Py пуст).

Каков был бы правильный подход, чтобы добиться желаемого поведения? Или это невозможно, и я должен переместить mystuff.py в mystuff / и получить к нему доступ как mystuff.mystuff (повторение кажется ненужным).

Простите, если я только что пропустил что-то очевидное. Я предполагаю, что это должно быть где-то задокументировано, но я не могу найти, где где-то находится.

Обновить. Я считаю, что метод Игнасио правильный, но мне он не очень нравится! Если в моем редакторе открыто несколько файлов, и все они называются __ init __. Py , все может запутаться. Итак, я решил оставить свою структуру как есть и связать mystuff.py с mystuff / __ init __. Py . Если у кого-то есть мнения о том, почему мне не следует этого делать, я бы хотел их услышать.

На самом деле, в конце концов, я свяжу наоборот, так как я не смог найти способ сделать символические ссылки разыменования distutils при создании tar.gz , и в итоге я получил битые ссылки в мой вывод. Этот способ имеет тот же эффект и делает его счастливым.

5
задан tjm 8 November 2011 в 13:46
поделиться