我最近将一个 Django 项目从 sqlite3 切换到了 postgres。我想从隐藏目录中的模块读取数据库密码。
.secrets
__init__.py
db.py # DB_PASSWORD = 'mypassword'
如何从位于隐藏的 .secrets 目录中的 db 模块导入 DB_PASSWORD?以下不起作用(ImportError):
from .secrets.db import DB_PASSWORD
我必须使用 __import__
技巧吗?对于代码样式约定,我更愿意使用 from/import 模式。
最佳答案
来自 PEP 328,http://www.python.org/dev/peps/pep-0328/#rationale-for-relative-imports您实际上应该避免命名以“点”开头的 python 模块,因为它在 Python 中表示相对导入。
如果你真的坚持这样做,你可以,但你必须使用 imp
模块。
示例用法:-
import imp
with open('.secret/__init__.py', 'rb') as fp:
secret = imp.load_module('.secret', fp, '.secret/__init__.py', \
('.py', 'rb', imp.PY_SOURCE))
因此对于您想要从 db.py
加载值的用例,它看起来像这样:-
import imp
with open('.secret/db.py', 'rb') as fp:
db = imp.load_module('.secret', fp, '.secret/db.py', \
('.py', 'rb', imp.PY_SOURCE))
print db.DB_PASSWORD # This will print out your DB_PASSWORD's value. Or use it whichever way you want.
虽然不会就此提出建议。
关于python - 从隐藏目录(包)导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14087011/