如何构造Python包(?)以向单个模块添加文件

如何构造Python包(?)以向单个模块添加文件,python,module,packages,Python,Module,Packages,我是Python模块/包构建行业的新手。我在一些目录中的一些文件中有一些方法。让我们假设它看起来像这样: MyOps/ |--FileOperations.py |--DirectoryOperations.py |--StringOperations.py |--__init__.py 每个*.py文件都包含许多方法,从语义角度来看,将它们放在一起是不可取的。在目录之外,我可以简单地使用模块(例如,从MyOps/的姊妹文件ops.py): 在实践中,这很管用。但是,我想分别为每个模块添加自述

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

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

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

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'

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

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

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

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


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

谢谢您的回复!我想做的事奇怪吗?有没有更好的、更符合逻辑的或更符合python风格的方法来实现类似的功能,模块在目录结构中有自己的位置,包含其他文件、示例等?这可能是无休止争论的主题。例如,对于软件应该提供什么,有一些意见(您是否包括测试等?)。Packaging SIG详细讨论了这些主题,并提供了分发包和相关数据的方法。由于不同操作系统的不同需求,这变得更加复杂。查找
setuptools
以进一步调查。
module 'MyOps.DirectoryOperations' has no attribute 'delete_tree'