如何在 Django Settings.py 中导入另一个 Python 3 文件?

Posted

技术标签:

【中文标题】如何在 Django Settings.py 中导入另一个 Python 3 文件?【英文标题】:How to Import Another Python 3 File in Django Settings.py? 【发布时间】:2018-02-28 23:08:00 【问题描述】:

我正在使用 Python 3。 我在同一个目录中有两个 Python 文件:first.py 和 second.py。 在 first.py 的开头,我使用:

from second import *

但是,它返回以下错误消息:

ModuleNotFoundError: No module named 'second'

我应该如何在 first.py 中导入它?

更新:为了阐明我的具体用例,我试图在 Django 中拆分我的 settings.py。我有一个主要的 settings.py 文件和另一个只包含机密信息的文件。我关注了this following documentation,它在 settings.py 中使用了以下行:

from settings_local import *

请注意,settings_local.py 位于同一目录中。但是,它返回以下错误消息:

ModuleNotFoundError: No module named 'settings_local'

我知道文档说“下面列出的一些示例需要修改以与 Django 1.4 及更高版本兼容。”但我不知道如何在 Python 3 中使用它。

【问题讨论】:

您从哪里运行脚本?您应该能够从运行脚本的文件夹中包含的 Python 文件导入。如果您从与脚本相同的文件夹中运行脚本,则不会出现此错误。 基本上,我试图在 Django 中拆分我的 settings.py。我有一个主要的 settings.py 文件和另一个只包含机密信息的文件。我遵循了以下文档,但它不起作用:code.djangoproject.com/wiki/… 【参考方案1】:

我刚刚找到了解决方案:

from .settings_local import *

代替:

from settings_local import *

我在this thread找到了解决方案。

【讨论】:

【参考方案2】:

可以使用以下代码sn-p:

from .settings_local import *

这是相对导入。 More Info here 和 here

【讨论】:

【参考方案3】:

您可以通过这种方式将文件添加到 Python 中

import sys
sys.path.insert(0, '/path/to/application/app/folder')
import file

【讨论】:

感谢您的回答。但是当文件在同一个路径时,为什么要给它一个绝对路径呢? 绝对路径更清晰:)【参考方案4】:
you can create __init__.py in current directory.

那么你可以使用:

from second import *

init.py 文件是 Python 将目录视为包含包所必需的;这样做是为了防止具有通用名称(例如字符串)的目录无意中隐藏模块搜索路径中稍后出现的有效模块。在最简单的情况下,init.py 可以只是一个空文件,但它也可以执行包的初始化代码或设置 __all__ 变量,稍后介绍。

【讨论】:

【参考方案5】:

您应该能够自动将文件所在的目录添加到PATH,然后导入另一个文件,这样:

import sys
import os
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
import second

【讨论】:

以上是关于如何在 Django Settings.py 中导入另一个 Python 3 文件?的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中导入设置

如何让一个django包修改settings.py?

Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

Django AUTHENTICATION_BACKENDS 导入错误

如何使用每个 SITE_ID 的唯一 settings.py 设置 django

如何在 Django settings.py 中为 CDN 设置 STATIC_URL