[英]Cannot import .py file into settings.py
我创建了一个单独的文件test.py来与 Azure Key Vault 交互。 当我只运行test.py文件时,它按预期工作。 但是,我无法在settings.py中导入它,以便在那里使用它的值。 我无法将任何文件导入到 settings.py 中,否则它会导致 Apache 出现内部 500 错误。
例如我想将这些行添加到我的 settings.py
import test
Pass = test.Pass
但是,当添加它并重新启动 Apache 服务器时,会出现错误 500 页,直到我删除这些行并重新启动。 test.py没有语法错误,因为我可以自己运行它并生成我正在寻找的结果,但是将任何文件放入settings.py会导致崩溃。 错误日志没有帮助。 为什么我无法将文件导入settings.py ?
我正在导入的文件是 PYTHONPATH 变量的一部分,我已经通过打印 sys.path 进行了检查。 该文件也位于与settings.py相同的目录中
我的网站/
设置,py
测试.py
网址.py
wsgi.py
初始化文件
服务器日志中的错误读取
ValueError: client_id should be the id of an Azure Active Directory application\r, referer: http://test.example.com/test/login/
但是,当我单独测试文件时,它按预期工作,成功连接到 Azure 并完成它需要的工作,检索并打印正确的密码。 只有在setting.py中导入才会出现这个错误
from os import environ as env
from azure.identity import ClientSecretCredential
from azure.keyvault.secrets import SecretClient
TENANT_ID = env.get("AZURE_TENANT_ID", "")
CLIENT_ID = env.get("AZURE_CLIENT_ID", "")
CLIENT_SECRET = env.get("AZURE_CLIENT_SECRET", "")
KEYVAULT_NAME = env.get("AZURE_KEYVAULT_NAME", "")
KEYVAULT_URI = f"https://{KEYVAULT_NAME}.vault.azure.net/"
_credential = ClientSecretCredential(
tenant_id=TENANT_ID,
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET
)
_sc = SecretClient(vault_url=KEYVAULT_URI, credential=_credential)
Pass = _sc.get_secret("Pass").value
Azure 电话不是问题,是导入问题。 当我通过执行以下操作在其他文件的独立测试中尝试 Azure 代码时:
import test
Pass = test.Pass
print(pass)
它打印出正确的密码。 因此,为什么 Azure 代码不是问题,应该重点关注。 问题是我无法将 ANY.py 文件导入到 settings.py 中,否则会导致错误。 例如,如果我尝试导入任何 python 文件,这就是我得到的错误:
import test\r
ModuleNotFoundError: No module named 'test'\r
不确定是否有效,但是您可以将文件重命名为mysite
目录中的__init__.py
,然后导入test.py
如下
from mysite import test
绝对导入是否工作取决于运行 python 解释器的目录。 我之前也遇到过PYTHONPATH
的问题。 你有没有试过from. import test
from. import test
?
@JohnGordon 的假设是正确的。 最初的错误是由 Azure 问题引起的。 进一步来说。 环境变量。 设置了局部环境变量,但是apache服务有自己的IP,所以需要设置全局变量。 一旦我将客户端 ID 设置为环境变量中的全局变量,它就起作用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.