【问题标题】:Why does importing a file from a folder work, but calling a file from an imported folder doesn't?为什么从文件夹中导入文件有效,但从导入的文件夹中调用文件不起作用?
【发布时间】:2020-09-21 14:41:14
【问题描述】:

我目前正在处理一个项目,其中主文件位于一个目录中,子目录中还有一些附加文件:

project
|- folder
|  |- __init__.py
|  |- file1.py
|  |- file2.py
|  |- file3.py
|- main.py

初始化文件为空。

就我而言,我想用尽可能少的代码将所有文件导入我当前的 main.py。关键是:

作品

from folder.file1 import somefunction1
from folder.file2 import somefunction2

somefunction1()
somefunction2()

作品

from folder import file1
from folder import file2

file1.somefunction1()
file2.somefunction2()

不工作

import folder
folder.file1.somefunction1()
folder.file2.somefunction2()

AttributeError: module 'folder' has no attribute 'file1'

我明白错误消息的含义,但不知道为什么会出现。在我的第一个示例中,我可以调用 folder.file 和 folder.file2 作为属性,但在我的最后一个示例中,我不能?

不幸的是,我只发现了类似的问题,询问如何从一般文件夹中导入文件,但没有关于这个特定问题。

Python 在后台到底在做什么,有没有办法解决我的问题?

【问题讨论】:

  • 您的__init__.py 中有什么内容?我认为为了使第三个工作,在__init__.py 中您必须包含import file1import file2
  • 它目前是空的,插入import file1 给我一个ModuleNotFoundError: No module named 'file1'(是的,我的文件被命名为完全相同:)

标签: python python-3.x import python-import


【解决方案1】:

你需要添加

from . import file1

在你的 _init_.py 这会将 file1 带入文件夹,然后您可以从 main.py 访问该文件夹

【讨论】:

    【解决方案2】:

    在您的 init.py 文件中

    __all__ = ["file1","file2","file3"]
    

    在 main.py 中

    from folder import *
    
    file1.somefunction1()
    
    file2.somefunction2()
    

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 2023-04-04
      • 2011-05-21
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      相关资源
      最近更新 更多