如何从同级目录导入 Python 脚本?

问题描述 投票:0回答:5

假设我有以下目录结构:

parent_dir/
    foo_dir/
        foo.py
    bar_dir/
        bar.py

如果我想从

bar.py
内部导入
foo.py
,我该怎么做?

python import path pythonpath
5个回答
58
投票

如果所有出现的目录都是Python packages,即它们都包含

__init__.py
,那么你可以使用

from ..bar_dir import bar

如果目录不是 Python 包,你可以通过使用

sys.path
来完成此操作,但你不应该这样做。


46
投票

您可以使用

sys
os
模块进行通用导入。在
foo.py
中从线条开始

import sys
import os
sys.path.append(os.path.abspath('../bar_dir'))
import bar

4
投票

假设您有以下结构:

root
  |_ productconst.py
  |_ products
     |_ __init__.py

如果你想在

products.__init__
中导入productconst,那么可以使用以下方法:

from ..productconst import * 

0
投票

如果您在 python 3+ 中遇到问题,以下内容对我有用

sys.path.append("..")

sys.path.append("..")
from bar_dir import bar

0
投票

大多数提议的答案都依赖于改变

sys.path
。恕我直言 - 如果您可以正确保留相对文件夹结构,则没有必要。

请参阅我的示例:

文件夹结构

bar_dir/bar.py

class Bar():
    def __init__(self) -> None:
        pass

    def __repr__(self) -> str:
        return "This is an instance of Bar"
    
    def some_method(self) ->None:
        pass

bar_dir/init.py

from .bar import Bar

foo_dir/foo.py

from ..bar_dir import Bar

class Foo():
    def __init__(self ,bar_instance: Bar) -> None:        
        self._bar=bar_instance

    def __repr__(self) -> str:
        return f"You are inside an instance of Foo and you have just accessed bar={self._bar}"

foo_dir/init.py

from .foo import Foo

sfo_main.py

import parent_dir.bar_dir as bar_lib
import parent_dir.foo_dir as foo_lib


if __name__ == "__main__":
    f=foo_lib.Foo(bar_instance=bar_lib.Bar())
    print(f"This is an instance of foo={f}")
    print(f"{bar_lib.Bar()}")

sfo_main.py 的输出

© www.soinside.com 2019 - 2024. All rights reserved.