我是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'
我有点困惑,是我完全以错误的方式构建了我的项目,还是我遗漏了一个小细节。我做错什么了?我正在拼命寻找一个例子,说明如何为您的模块构造一个包含子目录的包。我试图查找默认模块,但它们显然没有自述文件
似乎您想将当前的子模块转换为子包
你解决这个问题的尝试使结构几乎正确,但是过去是
MyOps.FileOperations
的现在是MyOps.FileOperations.FileOperations
,这几乎肯定不是你想要的我假定您创建的
__init__.py
文件是空的。如果是这样,只需删除它们,并将子目录中的另一个文件重命名为__init__.py
当Python初始化一个模块时,它运行该模块的
.py
文件中的代码。但是,要初始化包,它会运行包的__init__.py
文件中的代码,因此(例如)可以从MyOps.FileOperations
导入文件MyOps/FileOperations/__init__.py
中定义的函数f
,也可以继续导入FileOperations
子包并将其中的函数用作属性相关问题 更多 >
编程相关推荐