来自php的名称空间始终在php中定义良好,通常使用composer的psr-4
https://getcomposer.org/doc/04-schema.md#psr-4
例如你有一个文件夹
src/Foo/Bar/Baz
然后您在composer.json
文件中定义
src/Foo
是命名空间Foo
的起始位置
此后,按照惯例,所有子文件夹都是新的子命名空间,例如
src/Foo/Bar/Baz/MyClass.php
变成
Foo.Bar.Baz.MyClass
说我想将实用程序python类放入我的django项目中,我想在所有django“应用程序”中使用
我将其放在哪里,以及如何正确定义名称空间?理解python中名称空间的透明方法是什么?
答案 0 :(得分:3)
此文档中:
https://docs.djangoproject.com/en/2.2/ref/applications/#projects-and-applications
这是代码段:
A project’s root directory (the one that contains manage.py) is usually the container for all of a project’s applications which aren’t installed separately.
您可以在该目录下为实用程序创建选择的任何层次结构,这些层次结构可以符合python的package
系统:
答案 1 :(得分:1)
在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
是项目范围的utils模块的好地方。因此,您可以在任何应用中执行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
...
答案 2 :(得分:0)
如果要在应用程序中访问所需文件,可以将其添加到应用程序层次结构中。您可以直接将该文件夹保存在特定文件中,也可以使用import语句访问该文件。
例如:app / myfile
您可以从导入:。导入myfile 或从应用程序导入myfile |直接在您需要这些文件的文件中