gpt4 book ai didi

python - 如何构建 Python 包(?)以将文件添加到各个模块

转载 作者:行者123 更新时间:2023-11-28 19:04:09 25 4
gpt4 key购买 nike

我是 Python 模块/包构建行业的新手。我在某些目录中的某些文件中有一些方法。让我们假设它看起来像这样:

MyOps/
|--FileOperations.py
|--DirectoryOperations.py
|--StringOperations.py
|--__init__.py

每个 *.py 文件都包含许多方法,从语义的角度来看,将它们放在一起是不可取的。从目录外,我可以简单地使用模块(例如,从 MyOps/ 的姐妹文件 ops.py):

from MyOps import DirectoryOperations
DirectoryOperations.delete_tree("my/path")

在实践中这很好用。但是,我想分别为每个模块添加 README 文件(并可能为各个模块添加模块特定文件)。我原以为可以按如下方式更改目录结构:

MyOps/
|--FileOperations/
| |--FileOperations.py
| |--README.md
| |--__init__.py
|--DirectoryOperations/
| |--DirectoryOperations.py
| |--README.md
| |--__init__.py
|--StringOperations/
| |--StringOperations.py
| |--README.md
| |--__init__.py
| |--examples/
| |--...
|--__init__.py

但是,当我从上面尝试导入语句时,出现错误:

module 'MyOps.DirectoryOperations' has no attribute 'delete_tree'

我有点困惑是我完全以错误的方式构建了我的项目,还是我只遗漏了一个小细节。我在这里做错了什么?我正在拼命寻找一个关于如何为你的模块构建一个包含子目录的包的例子。我试着查找默认模块,但它们显然没有附带自述文件。

最佳答案

看来你想把当前的子模块变成子包。

您尝试解决问题的结构几乎是正确的,但以前是 MyOps.FileOperations 现在是 MyOps.FileOperations.FileOperations,这几乎肯定不是你想要什么。

我假设您创建的 __init__.py 文件是空的。如果是这样,只需删除它们,并将子目录中的另一个文件重命名为 __init__.py

当 Python 初始化模块时,它会运行模块的 .py 文件中的代码。但是,要初始化一个包,它会运行包的 __init__.py 文件中的代码,因此(例如)在文件 MyOps/中定义的函数 f FileOperations/__init__.py 可以从 MyOps.FileOperations 导入,或者您可以继续导入 FileOperations 子包并将其中的函数用作属性。

关于python - 如何构建 Python 包(?)以将文件添加到各个模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48931963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com