我一直在研究如何为自定义 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 回答

慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
您可以将以下行添加到 Parsers/__init__.py
from .FileType1_Parsers.parsers1 import example_class
然后,你可以导入example_class
通过
from Parsers import example_class
这是大包装中的常见做法。

慕后森
TA贡献1802条经验 获得超5个赞
您可以sys.path
在运行时进行修改,使其包含您将使用的每个模块的目录。例如,对于 package1 发出以下语句:
>>> sys.path.append(r"[package directory path]\\Parsers\\FileType1_Parsers\\package1")
您也可以对包中的任何其他模块执行此操作。现在,你可以使用这个命令:
from package1 import example_class
希望这可以帮助!
添加回答
举报
0/150
提交
取消