微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以跨同一个 python 包的模块重用导入吗?

如何解决我可以跨同一个 python 包的模块重用导入吗?

我有一个名为“test”的包,其中包含多个模块:

master/
|-- __init__.py
|-- app/
|-- auth/
|-- test/
|---- | __ init __.py
|---- | test_A.py
|---- | test_B.py
|---- | test_C.py

所有 test_X.py 导入相同的核心模块:

import unittest
from unittest.mock import patch
import json
from flask_sqlalchemy import sqlAlchemy

from master.app.app import create_app
from master.app.models import setup_db,subject_student,Subject,Student
from master.app.functions import query_a_record

我想知道是否有一种方法可以创建一个导入所有上述模块并将该文件导入每个测试文件的单个文件。我只是想避免代码重复。

我尝试过的:

  • 在测试包内的 __ init __.py 文件中包含所有导入,然后将 init 导入到每个测试中
  • 在包内创建一个 config.py,然后将配置导入每个模块。

当然,这些都没有奏效。关于如何只编写一次这些导入并在我的所有测试模块中重用那段代码的任何建议?或者这根本不可能?

解决方法

我建议您深入研究 Python 如何定义和管理命名空间

至于您的问题,config.py__init__.py 肯定会导入所需的模块,但它们的名称与该命名空间相关联,因此当您在 testX.py 脚本中访问任何这些名称时,它引发 NameError 因为您在不同的命名空间中并且无法识别该名称;你必须用它所属的模块的名称来限定它。

一个典型的函数调用是:

config.unittest.mock.patch()

您可以通过导入所有 config 命名空间轻松避免这种限定:

from config import * 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。