python:从父 __init__.py 文件导入?

python : importing from parent __init__.py file?

我在 __init__.py 文件

中定义了一个方法 foo 和一个 class bar 有一个方法 foo_bar
dir/
   __init__.py
   runme.py

现在我想从 runme.py

导入 __init__.py

我试过了

# in runme.py

from . import foo

foo()

import foo

foo()

但都不起作用。我正在使用 Python 3.7 和 Windows 10 Home

我已阅读 How to import classes defined in __init__.py 并进行了一些研究。

Python的例外是:

ImportError: attempted relative import with no known parent package
# __ init __.py 

def foo():
   print("Im Foo") 
class bar:
    def __init__():
        pass
    def foo_bar(self):
        print("Im Foo_Bar in class bar")

如果 pkg 是你的主包,你可以导入它(又名 pkg/__init__.py 文件)做:

import pkg

如果你想要这个包中的foo_bar功能,你可以这样写:

from pkg import foo_bar

因此,在 runme.py 模块中,您可以:

from pkg import foo_bar

foo_bar(...)

当然,你需要从根目录(pkg目录的父目录)调用你的runme.py模块:

python pkg/runme.py
# or
python -m pkg.runme

请考虑阅读 Executing modules as scripts

编辑 1

您可以将您的项目根目录添加到sys.path:

# in `runme.py`:
def _fix_sys_path():
    import os
    import sys

    HERE = os.path.abspath(os.path.dirname(__file__))  # /path/to/project_dir/pkg
    PROJECT_DIR = os.path.dirname(HERE)  # /path/to/project_dir
    sys.path.insert(0, PROJECT_DIR)


_fix_sys_path()
from pkg import foo_bar

foo_bar(...)