如何在multi-dir Python工具中设置导入,以便可以通过Pycharm/terminal运行单元测试,同时为Python初学者提供友好的用户体验?
上下文如何在multi-dir Python工具中设置导入,以便可以通过Pycharm/terminal运行单元测试,同时为Python初学者提供友好的用户体验?,python,pycharm,python-import,Python,Pycharm,Python Import,上下文 我正在创建一个工具,与我一起工作的人可以通过继承基类来添加东西。他们需要使用实用程序,使用Pycharm或终端运行单元测试,并能够任意创建子目录以保持良好的组织 我正在努力找出如何让Pycharm和终端在运行Pycharm和终端的单元测试时允许相同的导入。我已经读了很多关于Python导入的书,我仍然发现导入是Python中最难理解的东西。我希望避免到处添加sys.path.appends,因为我希望Pycharm能够为实用程序的使用提供提示。我认为相对导入将提供我所需要的,但我不认为它
我正在创建一个工具,与我一起工作的人可以通过继承基类来添加东西。他们需要使用实用程序,使用Pycharm或终端运行单元测试,并能够任意创建子目录以保持良好的组织 我正在努力找出如何让Pycharm和终端在运行Pycharm和终端的单元测试时允许相同的导入。我已经读了很多关于Python导入的书,我仍然发现导入是Python中最难理解的东西。我希望避免到处添加sys.path.appends,因为我希望Pycharm能够为实用程序的使用提供提示。我认为相对导入将提供我所需要的,但我不认为它们是用户友好的,并且随着潜在的任意目录结构更改,相对导入可能会反复中断 实际问题
my_project
|-- main.py
|-- call_unit_tests.py
|-- base_class.py
|-- utilities
- utility_class.py
|-- subclasses
- sub_class.py
|-- more_subclasses
- another_sub_class.py
main.py
if __name__ == '__main__':
subclasses = create_instances_of_all_subclasses()
for c in subclasses:
c.do_things()
if __name__ == '__main__':
run_all_the_subclass_unittests()
run_all_the_utilities_unittests()
import unittest
from utilities.utility_class import Utility
from base_class import BaseClass # not sure how
class SubClass(BaseClass)
def __init__(self):
Utility().do_something_useful()
class UnitTests(unittest.TestCase):
def setUp(self):
test_this_class = SubClass()
if __name__ == '__main__':
unittest.main()
调用单元测试.py
if __name__ == '__main__':
subclasses = create_instances_of_all_subclasses()
for c in subclasses:
c.do_things()
if __name__ == '__main__':
run_all_the_subclass_unittests()
run_all_the_utilities_unittests()
import unittest
from utilities.utility_class import Utility
from base_class import BaseClass # not sure how
class SubClass(BaseClass)
def __init__(self):
Utility().do_something_useful()
class UnitTests(unittest.TestCase):
def setUp(self):
test_this_class = SubClass()
if __name__ == '__main__':
unittest.main()
sub_class.py
if __name__ == '__main__':
subclasses = create_instances_of_all_subclasses()
for c in subclasses:
c.do_things()
if __name__ == '__main__':
run_all_the_subclass_unittests()
run_all_the_utilities_unittests()
import unittest
from utilities.utility_class import Utility
from base_class import BaseClass # not sure how
class SubClass(BaseClass)
def __init__(self):
Utility().do_something_useful()
class UnitTests(unittest.TestCase):
def setUp(self):
test_this_class = SubClass()
if __name__ == '__main__':
unittest.main()