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

2024-05-14 21:01:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

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

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

但是,当我尝试上面的import语句时,出现了一个错误:

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

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


Tags: 模块文件方法pyimport目录treeinit
1条回答
网友
1楼 · 发布于 2024-05-14 21:01:16

似乎您想将当前的子模块转换为子包

你解决这个问题的尝试使结构几乎正确,但是过去是MyOps.FileOperations的现在是MyOps.FileOperations.FileOperations,这几乎肯定不是你想要的

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

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

相关问题 更多 >

    热门问题