【发布时间】:2017-12-11 01:50:57
【问题描述】:
我厌倦了阅读相对导入的一次性用例,所以我想我想获得一个示例,说明如何从 above 和 目录进行相对导入strong>bellow,用于导入模块函数和类对象。
目录结构:
.
├── lib
│ ├── __init__.py
│ └── bar.py
└── src
├── main.py
└── srclib
├── __init__.py
└── foo.py
bar.py
def BarFunc():
print("src Bar function")
class BarClass():
def __inti__(self):
print("src Bar Class")
def test(self):
print("BarClass working")
foo.py
def FooFunction():
print("srclib Foo function")
class FooClass():
def __init__(self):
print("srclib Foo Class")
def test(self):
print("FooClass working")
问题:python 3 中导入这些用例的语法是什么?
main.py
# What is the syntax to import in python 3?
# I want to be able to call FooFunc()
foo.FooFunc()
# I want to be able to create a FooClass() object
foo_class = foo.FooClass()
foo_class.test()
# I want to be able to call FooFunc()
bar.BarFunc()
# I want to be able to create a BarClass() object
bar_class = bar.BarClass()
bar_class.test()
【问题讨论】:
-
相对导入与目录无关。它们不是目录遍历机制;他们只说要导入哪个东西,而不是那个东西在文件系统中的位置。
-
好的。我不知道。不过,鉴于我的目录结构,我仍然想知道如何从 main 导入我的 lib 文件。
-
您实际上根本无法在
main.py中执行相对导入,因为它不是包的一部分。 -
无法共同导入
lib.bar,因为您的顶级模块是main,而lib超出了顶级模块。但是您可以使用sys.path.append添加该目录或设置环境变量PYTHONPATH。两者都不推荐。 -
你确定你的意思是
def __inti__(self):吗?
标签: python python-3.x relative-import