Python 从x导入y模块NotFoundError:没有名为';x';

Python 从x导入y模块NotFoundError:没有名为';x';,python,flask,python-unittest,Python,Flask,Python Unittest,我已将应用程序的API密钥包含在名为privateinfo.py的文件中,但出于安全考虑,.git忽略了它。我将密钥信息导入到init.py文件中,但当我对应用程序进行单元测试时,收到此错误, “来自.privateinfound导入密钥模块NotFoundError:没有名为'app.privateinfound'的模块” 这就是我将密钥导入init.py文件的方式 from .privateinfo import key 以下是如何设置我的目录的照片: 正如您所看到的,privatein

我已将应用程序的API密钥包含在名为privateinfo.py的文件中,但出于安全考虑,.git忽略了它。我将密钥信息导入到init.py文件中,但当我对应用程序进行单元测试时,收到此错误, “来自.privateinfound导入密钥模块NotFoundError:没有名为'app.privateinfound'的模块”

这就是我将密钥导入init.py文件的方式

from .privateinfo import key
以下是如何设置我的目录的照片:


正如您所看到的,privateinfo文件和init文件都在app目录中,而.gitignore在根目录中。

代码问题:您必须单独运行该文件,可能是为了测试。在这种情况下,python不会将其识别为模块

这里有一个解决方案

写入:
来自app.privateinfo导入密钥

注意:请记住,只有当您从外部运行它时,它才会起作用。i、 e.您在其中编写上述语句的文件必须是
config、forms、models、run
中的任何文件

要单独运行文件,请执行以下操作: 假设您在文件
refactor.py
中编写了上述import语句,并希望对其进行测试。只需在
app
外部创建一个文件
runner.py
,然后编写
import-app.refactor
。现在执行
runner.py


说明:这将运行
重构
,同时将
应用程序
视为模块,因此,您的导入将工作。

在您的应用程序中
\uuuuuuuuuuuuuuuuuuupy
添加
自.app导入*

然后,在测试文件中,您可以导入
应用程序
包。测试中的
\uuuu init\uuuu.py
可以为空;它将测试定义为一个不同的包

例如,在测试文件中,您可以将import语句从app.privateinfo import key更改为


app
tests
被视为不同的模块;当您导入另一个模块时,您将导入其
\uuuu init\uuuuu.py
中定义的内容。如果你的应用程序
\uuuuu init\uuuuuuuuupy
为空,你基本上不会从该模块加载任何内容。

1)你可以分享代码片段吗,这将更容易帮助你2)尝试从中加载
。导入密钥
我在问题中列出了代码我的问题是我正在对代码进行单元测试(未运行应用程序)并收到上述错误。我需要将密钥导入init文件中,因为这是使用API的地方。init文件和privateinfo文件都在app目录中,这就是为什么我将其格式化为相对导入的“.privateinfo import key”。。那就简单了。只需从根目录运行:
python3-m unittest