python/django,名称空间的根在哪里?
来自php的名称空间总是在php中定义良好,通常使用composer的psr-4 e、 你有一个文件夹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“应用程序”中使用它 我将把它放在哪里,
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的小要点。注意:与文档中不同,我不会以
/
结束文件夹。那是陷阱吗?我记不起来了,但它可能对你有帮助,所以它就在那里