python/django,名称空间的根在哪里?

python/django,名称空间的根在哪里?,python,django,python-3.x,Python,Django,Python 3.x,来自php的名称空间总是在php中定义良好,通常使用composer的psr-4 e、 你有一个文件夹 src/Foo/Bar/Baz 然后在composer.json文件中定义 src/Foo是命名空间Foo的起始位置 此后,按照惯例,所有子文件夹都是新的子命名空间,例如 src/Foo/Bar/Baz/MyClass.php变成 Foo.Bar.Baz.MyClass 假设我想在django项目中加入一个实用程序python类,我想在所有django“应用程序”中使用它 我将把它放在哪里,

来自php的名称空间总是在php中定义良好,通常使用composer的psr-4

e、 你有一个文件夹

src/Foo/Bar/Baz

然后在
composer.json
文件中定义
src/Foo
是命名空间
Foo
的起始位置

此后,按照惯例,所有子文件夹都是新的子命名空间,例如

src/Foo/Bar/Baz/MyClass.php
变成

Foo.Bar.Baz.MyClass

假设我想在django项目中加入一个实用程序python类,我想在所有django“应用程序”中使用它

我将把它放在哪里,以及如何正确定义名称空间?理解python中名称空间的透明方式是什么?

来自本文档:

这段代码是:

项目的根目录(包含manage.py的根目录)通常是不单独安装的所有项目应用程序的容器。

您可以在该目录下为实用程序创建您选择的任何层次结构,它可以符合python的
系统:


在Python中,有一个模块的搜索路径。可以使用
PYTHONPATH
环境变量从命令行初始化它,并通过编程方式访问它

默认情况下,用于启动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
可用

我想说,项目范围的utils模块的一个好地方是项目包
mysite
。因此,您可以在任何应用程序中导入mysite.utils。如果它超出了单个文件的范围,则可以将其转换为子包,因此您可以使用一个包含
\uu init\uuuuuuuuuupy
文件的
utils
目录,而不是
utils.py
文件

上面的结构使全局名称空间有点混乱。因此,有些人更喜欢这样一种结构,即所有应用程序都是项目包的子包,如下所示:

mysite
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── utils.py
│   ├── wsgi.py
│   └── apps
│       └── polls
│           ├── __init__.py
│           ├── models.py
│           ├── utils.py
...

感谢psr-4的链接,我想这对我以后会很有用。@davejagoda尽管如此,psr 4文档还是让人困惑(我花了很多时间才开始使用它),因此我在这里为您创建了一个现实生活中的composer.json的小要点。注意:与文档中不同,我不会以
/
结束文件夹。那是陷阱吗?我记不起来了,但它可能对你有帮助,所以它就在那里