【问题标题】:Python How to import modules from same level packages with __init__.py?Python 如何使用 __init__.py 从同级包中导入模块?
【发布时间】:2021-11-08 06:02:38
【问题描述】:

我在组织项目结构和成功运行程序时遇到问题。我不想使用 sys.path 模块,所以我选择创建 init.py 文件。但我注意到冗余,我很困惑如何正确地做到这一点。其他包也需要相邻包的模块。

src
- __init__.py
- main.py
- data
-- __init__.py
-- data_loader.py
- util
-- __init__.py
-- stringUtil.py

_初始化_.py

import .data
import .util

main.py

from data import *
from utils import *

def __init__():
    print(StringUtil.substringRight("Hello world!", "l"))
    loader = DataLoader("C:/SOME/PATH/")

数据/_初始化_.py

from .data import *

data/data_loader.py

from util.stringUtils import StringUtil

class DataLoader()
    def __init__(self, path):
        StringUtil.printHierarchyTree(path)

util/_init_.py

from .util import *

util/stringUtil

class StringUtil:
    @staticmethod
    def substringRight():
        ...

我只想在应用启动时加载所有模块和类。

上面写着:

File "main.py", line 5, in <module>
StringUtil.substringRight
NameError: name 'StringUtil' is not defined

Data Loader 也不知道 StringUtil 类

【问题讨论】:

    标签: python-3.x import package structure project


    【解决方案1】:

    不应该在 main.py 而不是

    from utils import *
    

    这条线?

    from util import *
    

    无论如何使用

    from some_package import * 
    

    总是不好的做法,你应该总是只导入特定的东西而不是使用星号。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    • 是的,我打错了,但问题是一样的。我理解你的意思,但我应该在哪里进行所有进口?如果我是正确的,那么 init.py 应该只包含同一目录的模块中的所有类,以便在 main“from util import *”中导入时加载所有类,因为调用“util”文件夹会调用 init.py .
    • 好的,所以我尝试重现您的问题,我有这个解决方案。在第一种情况下,您不需要 init.py 在 src 文件夹中,因此您可以将其删除。然后在data\__init__.py 中更改此from data.data_loader import DataLoader 上的导入,在util\__init__.py 中更改此from util.stringUtil import StringUtil 上的导入,并在data_loader.py 上此from util.stringUtil import StringUtil 上更改导入。通过这些更改,我的代码没有错误。如需更多信息,我会推荐这篇文章python-packaging-tutorial.readthedocs.io/en/latest/…
    猜你喜欢
    • 2013-04-21
    • 2018-10-27
    • 2013-07-29
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2019-05-29
    相关资源
    最近更新 更多