如何跳过 Python 导入中的中间文件夹?

Sas*_*lla 7 python git-submodules python-3.x

我的 python 应用程序的文件夹结构如下:

my_repo/
  src/
    main.py
    util/   <-- util is a git submodule
      src/
        torgle.py
      test/
        test_torgle.py
  test/
    test_main.py
Run Code Online (Sandbox Code Playgroud)

在内部main.py,我可以util像这样在子模块中导入内容:

from util.src.torgle import Torgler
Run Code Online (Sandbox Code Playgroud)

但这src/只是在我的 git 子模块存储库中组织事物的一种方法,并且不应该真正成为主存储库中包名称的逻辑部分。有什么方法可以跳过src模块导入的部分吗?我宁愿这样做:

from util.torgle import Torgler
Run Code Online (Sandbox Code Playgroud)

也就是说,我可以util/src为 Pythonutil包设置别名文件夹吗?

(请注意,在我的实际情况中,我有更深层的嵌套包 ( util.x.y.z.torgle),因此from util import torgle; torgle.Torgler(...)无法很好地扩展。我对 特别感兴趣from util.torgle import Torgler。)

Ben*_*ell 1

您可以通过添加 my_repo/src/util/__init__.py 并向其中添加以下行来做到这一点:

from .src import torgle
Run Code Online (Sandbox Code Playgroud)

然后您将能够执行以下操作:

from util import torgle
torgle.Torgler(...)
Run Code Online (Sandbox Code Playgroud)

  • 效果很好,但不幸的是只适用于一个级别,如此处所示。在我的真实案例中,我有更深层的嵌套包(`util.xyztorgle`),所以我相信使用这种技术我必须执行`from util import x; xyztorgle.Torgler(...)`,对吧?因此,我对“from util.torgle import Torgler”的工作特别感兴趣。我已经更新了问题以澄清这一点。 (5认同)