导入并从包中运行一个子包

时间:2019-02-02 22:23:28

标签: python python-3.x pylint

我正在寻找一种从Python 3的包中导入子包的方法。 考虑以下结构:

├── main.py
└── package
    ├── subpackage
    │   └── hello.py
    └── test.py

我想做的是在test.py(由main.py启动)中使用hello.py内部的函数

main.py

from package.test import print_hello

print_hello()

package / test.py

from subpackage.hello import return_hello

def print_hello():
    print(return_hello())

package / subpackage / hello.py

def return_hello():
    return "Hello"

但我发现了以下错误:

Traceback (most recent call last):
  File ".\main.py", line 1, in <module>
    from package.test import print_hello
  File "D:\Python\python-learning\test\package\test.py", line 1, in <module>
    from subpackage.hello import return_hello
ModuleNotFoundError: No module named 'subpackage'

我尝试将.放在test.py中,但是它起作用了,但是我的短毛猫不喜欢它。

enter image description here

我在做什么错了?


edit:我设法按照建议使用了绝对路径,但是现在当我尝试将所有内容都放在子文件夹中时,pylint无法导入。

└── src
    ├── main.py
    └── package
        ├── subpackage
        │   └── hello.py
        └── test.py

enter image description here

1 个答案:

答案 0 :(得分:1)

只需使用

from .subpackage.hello import return_hello

代替

from subpackage.hello import return_hello

在您的test.py文件中,并阅读this指南以更好地了解导入在python中的工作方式。

您可以在此处看到固定的结果:https://repl.it/@ent1c3d/SoupySadUnderstanding