В Python есть путь поиска для модулей. Его можно инициализировать из командной строки с помощью переменной среды PYTHONPATH
и получить программный доступ через sys.path
.
По умолчанию каталог скрипта, который вы используете для запуска интерпретатора Python, является первой записью в пути поиска.
Любой модуль или пакет на пути Python «запускает новое пространство имен», чтобы использовать вашу формулировку. Давайте предположим, что ваш проект с именем mysite
имеет приложение с именем polls
и имеет такую структуру:
mysite
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── utils.py
│ └── wsgi.py
├── polls
│ ├── __init__.py
│ ├── models.py
│ ├── utils.py
...
Если вы начнете с python manage.py runserver
, пакеты mysite
и polls
будут доступны.
Я бы сказал, что хорошее место для утилиты для всего проекта - пакет проекта mysite
. Таким образом, вы делаете import mysite.utils
в любом из ваших приложений. Если он выходит за пределы одного файла, вы можете превратить его в подпакет, поэтому вместо utils.py
у вас будет каталог utils
, содержащий файл __init__.py
.
Приведенная выше структура немного загромождает глобальное пространство имен. Поэтому некоторые люди предпочитают структуру, в которой все ваши приложения являются подпакетами вашего пакета проекта, например:
mysite
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── utils.py
│ ├── wsgi.py
│ └── apps
│ └── polls
│ ├── __init__.py
│ ├── models.py
│ ├── utils.py
...