Python软件包文件夹结构

时间:2019-01-31 15:34:50

标签: python package structure

我一直在研究如何为自定义python包构建文件夹结构。有几次尝试,但似乎没有一个总体适用。特别是__init__.py文件的使用(或不使用)。

我有一个包含几个子软件包的软件包,每个子软件包都负责解析某种文件。因此,我目前采用这种结构:

Parsers/
├── __init__.py
|
├── ExternalPackages
│   ├── __init__.py
│   ├── package1
│   └── package2
|
├── FileType1_Parsers/
│   ├── __init__.py
│   ├── parsers1.py
│   └── containers1.py
│   
└── FileType2_Parsers/
    ├── __init__.py
    ├── parsers2.py
    └── containers2.py

但是似乎不是很pythonic,当我导入他的包并且想要使用模块的某个类时,我必须输入类似

from Parsers.FileType1_Parsers.parsers1 import example_class

是否有关于如何构造此类软件包的约定或有关如何避免如此长的导入行的规则?

2 个答案:

答案 0 :(得分:1)

您可以将以下行添加到Parsers/__init__.py

from .FileType1_Parsers.parsers1 import example_class

然后,您可以导入example_class

from Parsers import example_class

这是在大包的普遍做法。

答案 1 :(得分:0)

您可以在运行时修改sys.path,以使其包含要使用的每个模块的目录。例如,对于package1,发出以下语句:

>>> sys.path.append(r"[package directory path]\\Parsers\\FileType1_Parsers\\package1")

您也可以对软件包中的任何其他模块执行此操作。现在,您可以使用以下命令:

from package1 import example_class

希望这会有所帮助!