如何在 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 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)
Django AUTHENTICATION_BACKENDS 导入错误