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(...)
我在 __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(...)