【问题标题】:Python3 relative importsPython3 相对导入
【发布时间】: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 中导入这些用例的语法是什么?

ma​​in.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


【解决方案1】:

这完全取决于您从哪里开始 python 解释器。在您的情况下,我建议您从项目的根目录启动解释器,同时进行以下更改:

在文件src/srclib/__init__.py 中添加:

from . import foo

这样做的原因是在您的__init__.py 文件中明确说明要从您的模块中导入什么。

在您的 main.py 文件中,添加以下内容:

from lib import bar
from src.srclib import foo

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2023-03-04
    • 2014-01-02
    • 2021-12-07
    • 2017-09-17
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多