Another "ImportError: cannot import name"

Another "ImportError: cannot import name"

我有四个文件:menu.pynotebook.py__init__.pytest.py,按照@afaq 的建议排列。

我的notebook.py:

class Note:
    def __init__(self,memo,tag = ''):
        self.memo = memo
        self.tag = tag

    def match(self,filter):
        '''determine if this note matches the filter text, return
        true if match, false if not'''
        return filter in self.memo or filter in self.tag

class Notebook:
    def __init__(self):
        '''ininitalize a notebook with empty list'''
        self.note = []

    def search(self,filter):
        '''Find all notes that match the given filter string.'''
        return [note for note in self.note if note.match(filter)]

menu.py:(已编辑)

import sys

from .notebook import Note, Notebook

class Menu:
    '''Display a menu and respond to choices when run.'''
    def __init__(self):
        self.notebook = Notebook()
        self.choices = {
            "1": self.search_note,
            "2": self.quit
        }

    def display_menu(self):
        print("""
            Notebook Menu
            1. Search Notes
            2. Quit
            """)

    def run(self):
        '''Display the menu and respond to choices.'''
        while True:
            self.display_menu()
            choice = input("Choice is: ")
            action = self.choices.get(choice)
            if action:
                action()
            else:
                print("{0} is not a valid choice".format(choice))

    def search_note(self):
        '''search for text and display all notes contain it'''
        filter = input("Search for: ")
        notes = self.notebook.search(filter)
        self.show_note()

    def quit(self):
        print("Bye bye")
        sys.exit(0)

我的__init__.py是空的

我的test.py:

from Notebook.my_notebook.menu import Menu

if __name__ == "__main__":
    Menu().run()

当我运行 test.py, python returns 我这个错误:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    from Notebook.my_notebook.menu import Menu
ModuleNotFoundError: No module named 'Notebook'

我该如何解决这个问题?

在单独的模块中创建 if __name__ == "__main__": 调用。尝试执行该模块时不能进行相对导入。

勾选Ultimate answer to relative python imports

menu.py

import sys

from .notebook import Note, Notebook

class Menu:
    '''Display a menu and respond to choices when run.'''
    def __init__(self):
        self.notebook = Notebook()
        self.choices = {
            "1": self.search_note,
            "2": self.quit
        }

    def display_menu(self):
        print("""
            Notebook Menu
            1. Search Notes
            2. Quit
            """)

    def run(self):
        '''Display the menu and respond to choices.'''
        while True:
            self.display_menu()
            choice = input("Choice is: ")
            action = self.choices.get(choice)
            if action:
                action()
            else:
                print("{0} is not a valid choice".format(choice))

    def search_note(self):
        '''search for text and display all notes contain it'''
        filter = input("Search for: ")
        notes = self.notebook.search(filter)
        self.show_note()

    def quit(self):
        print("Bye bye")
        sys.exit(0)

你的目录结构应该是这样的。

你的包结构应该是这样的。

执行程序代码如下所示