代码之家  ›  专栏  ›  技术社区  ›  J.C

当我尝试导入时,我正试图将我的python文件分离到不同的文件夹中。我遇到错误没有名为“animal”的模块

  •  -1
  • J.C  · 技术社区  · 2 年前

    我有这个文件结构

    - animal //this folder contains my pthon project
        - mamal (Folder)
             - dog.py //this is my dog python file
        - reptile (Folder)
             - snake.py //this is my snake python file
        - main.py // Is the python file that should access the mamal.py file
    

    这是我的dog.py代码

    class Dog:
    
        def __init__(self):
            self.name = "Dog"
    
        def draw_dog():
            print("₍ᐢ•ᴥ•ᐢ₎")
    

    这是我的snake.py代码

    class Snake:
        def __init__(self):
    
            self.name = "Snake"
    
        def draw_snake():
            print("===========*")
    

    这是我的main.py代码,我试图在其中调用dog类

    from mamal.dog import Dog
    
    Dog.draw_dog()
    

    但当我运行main.py时,我得到以下错误ModuleNotFoundError:没有名为“animal”的模块

    为什么会这样,以及我如何解决这些问题

    1 回复  |  直到 2 年前
        1
  •  1
  •   sahasrara62    2 年前

    使用的蟒蛇3:

    Python 3.9.17 (main, Jul 13 2023, 12:25:11)
    [Clang 14.0.3 (clang-1403.0.22.14.1)] on darwin
    

    操作系统:macOS

    这在mac中运行良好,您需要修改的是类,在该类中定义内部方法而不使用self或声明其为静态方法

    这就是我所做的回复

    文件结构

    ├── animal
    │   ├── mammal
    │   │   ├── __pycache__ #ignore it 
    │   │   │   └── dog.cpython-39.pyc # ignore it too
    │   │   └── dog.py
    │   └── reptile
    │       └── snake.py
    └── main.py
    

    snake.py-dog.py和main.py的文件内容

    dog.py 文件

    # ❯ cat animal/mammal/dog.py
    class Dog:
        def __init__(self):
            self.name = "Dog"
        def draw_dog(self): #<- added self
            print("www")
    

    snake.py文件

    # ❯ cat animal/reptile/snake.py
    class Snake:
        def __init__(self):
            self.name = "Snake"
        def draw_snake(self): # <- added self
            print("===>")
    

    main.py文件

    # ❯ cat main.py
    from animal.mammal.dog import Dog
    
    Dog().draw_dog() # <- update in usage
    

    现在我们跑步的时候 python3 main.py 我们得到了输出

    # ❯ python3 main.py
    www
    

    从系统中的不同位置运行它,而不是在项目本身中,它是有效的

    # ❯ python3 /tmp/project/main.py
    www