繁体   English   中英

无法将 .py 文件导入 settings.py

[英]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中导入才会出现这个错误

测试.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM