如何构建 Python 包(?)以将文件添加到各个模块
How to structure Python package (?) to add files to individual modules
我是 Python module/package 建筑行业的新手。我在某些目录中的某些文件中有一些方法。让我们假设它看起来像这样:
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
文件中的代码,因此(例如)可以从 [=10= 导入文件 MyOps/FileOperations/__init__.py
中定义的函数 f
],或者您可以继续导入 FileOperations
子包并将其中的函数用作属性。
我是 Python module/package 建筑行业的新手。我在某些目录中的某些文件中有一些方法。让我们假设它看起来像这样:
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
文件中的代码,因此(例如)可以从 [=10= 导入文件 MyOps/FileOperations/__init__.py
中定义的函数 f
],或者您可以继续导入 FileOperations
子包并将其中的函数用作属性。