Python:无法从init文件导入在安装方法中初始化的全局变量

Python:无法从init文件导入在安装方法中初始化的全局变量,python,scope,global-variables,python-unittest,Python,Scope,Global Variables,Python Unittest,我有一个带有测试模块的包,在init文件中有一个带有一些操作的setUp方法。这些操作在包的模块中的任何单元测试运行之前正确执行。在setUp方法中,我想初始化一个全局变量,然后从包的其他模块访问它。但这不起作用 # TestPackage/__init__.py def setUp(): global spec_project core_manager = get_core_manager() spec_project = core_manager.get_spec()

我有一个带有测试模块的包,在init文件中有一个带有一些操作的setUp方法。这些操作在包的模块中的任何单元测试运行之前正确执行。在setUp方法中,我想初始化一个全局变量,然后从包的其他模块访问它。但这不起作用

# TestPackage/__init__.py
def setUp():
    global spec_project
    core_manager = get_core_manager()
    spec_project = core_manager.get_spec()

#TestPackage/test_module.py
from TestPackage import spec_project
import unittest

class TestRules(unittest.TestCase):
    def setUp(self):
        spec_project.get_new_device()
像这样我得到一个

ImportError:无法导入名称规范\u项目

如果我在init文件中的setUp方法之外初始化spec_项目变量,我可以访问它,但在setUp方法中的操作之后,它的内容不会更改

# TestPackage/__init__.py
spec_project = None
def setUp():
    global spec_project
    core_manager = get_core_manager()
    spec_project = core_manager.get_spec()

#TestPackage/test_module.py
from TestPackage import spec_project
import unittest

class TestRules(unittest.TestCase):
    def setUp(self):
        spec_project.get_new_device()
像这样我得到一个

AttributeError:“非类型”对象没有“获取新设备”属性

如何在init文件的setUp方法中初始化spec_project变量,并且仍然可以从包中的其他模块访问它?

看起来好像没有调用setUp(),但是如果您确定它是,则可能是导入TestPackage的方式。尝试如下导入:

#TestPackage/test_module.py
import TestPackage
import unittest

class TestRules(unittest.TestCase):
    def setUp(self):
        TestPackage.spec_project.get_new_device()
在使用全局函数之前,必须调用setUp()方法。同样的道理也适用于你尝试的第二种方法。但同样,这是假设安装程序正在运行。如果您觉得有必要,您可以使用别名TestPackage,或者如果它是在方法之外定义的,您应该能够导入它


由于您显式导入它,它很可能试图复制它,这是不可能的,因为它位于setUp()正文中。

“这些操作在包的模块中的任何单元测试运行之前都会正确执行。”-您确定吗,因为它们似乎没有运行。@jornsharpe对此我很确定,我可以在package setUp方法中打印内容,以确保它按预期运行。
\uuuu init\uuuu.setUp
是否应该在导入
TestPackage
时运行?我不能复制这种行为。@chepner我用nose运行测试,它允许包级别的设置和拆卸方法。毫无疑问,setUp方法正在运行,在包中的任何其他测试用例之前,我可以很容易地确认这一点。