在 Python 中创建包含多个子包的包

GIS*_*han 5 python import module package python-3.x

我正在尝试在 Python 中创建一个包,它有许多需要互操作的子包(我不确定这对它们来说是否正确)。

我有一个这样的(简化的)结构:

/package
    |-script1.py
    |-script2.py
    |-subpackage1
    |   |-__init__.py
    |   |-src
    |   |   |-__init__.py
    |   |   |-my_program.py
    |   |   |-functions.py
    |   |   |-...
    |
    |-tests
    |    |-a_tests.py
    |-subpackage2
    |    |-web-server.py
    |    |-API
    |    |    |-__init__.py
    |    |    |-REST.py
    |    |    |-...
Run Code Online (Sandbox Code Playgroud)
  • package/subpackage2 需要能够调用 package/subpackage1/src/functions.py
  • package/tests调用两个子包(使用pytests)。
  • package/subpackage1/src/functions.py 需要能够调用内部的其他模块 subpackage1

我已经看到了这个答案:https : //stackoverflow.com/a/33195094 - 它解释了我需要做什么(创建一个包),但它没有解释如何去做。

我可以很容易地让两者scripts使用以下方法调用它们的组件子包:

import subpackage1.src.my_program.py

(即类似于此处的建议)但随后my_program.py失败并显示ImportError: No module named 'functions'

那么,我需要什么胶水来设置这个结构?

GIR*_*ANI 3

所以为了解决这个问题我创建了一个类似的文件夹结构

/package
    |-script1.py
    |-subpackage1
    |   |-__init__.py
    |   |-src
    |   |   |-__init__.py
    |   |   |-functions.py
Run Code Online (Sandbox Code Playgroud)

我的 script1.py 文件有

import subpackage1
import subpackage1.src
import subpackage1.src.functions as f


print(f.hello())
Run Code Online (Sandbox Code Playgroud)

我的functions.py文件有

def hello():
    return "from the functions"
Run Code Online (Sandbox Code Playgroud)

现在从package文件夹中

我做到了

$ python script1.py

脚本运行并输出

from the functions

显示。

我在用python3

那么我是否错过了一些东西,因为它在我的系统上运行。

注意:我添加了三个不同的imports来检查那里的导入错误。