如何从同级目录导入 Python 脚本?
Posted
技术标签:
【中文标题】如何从同级目录导入 Python 脚本?【英文标题】:How do I import a Python script from a sibling directory? 【发布时间】:2012-05-03 14:41:31 【问题描述】:假设我有以下目录结构:
parent_dir/
foo_dir/
foo.py
bar_dir/
bar.py
如果我想从foo.py
中导入bar.py
,我该怎么做?
【问题讨论】:
见:***.com/questions/6323860/sibling-package-imports/… 【参考方案1】:如果所有出现的目录都是 Python 包,即它们都包含__init__.py
,那么你可以使用
from ..bar_dir import bar
如果目录不是 Python 包,您可以通过使用 sys.path
来做到这一点,但您不应该这样做。
【讨论】:
如果你想导入一个非包并且你只是从一个兄弟运行一个python,这将不起作用。在这种情况下 sys.path.append 是要走的路 @mhstnsc 我会说在这种情况下你做错了什么,但如果它只是一些 hacky 脚本,那么与sys.path
混在一起可能是可以的。
没有错,但是在运行主模块时,您不能进行相对导入。 python.org/dev/peps/pep-0366
当我对此运行ipython foo.py
时,我得到ImportError: attempted relative import with no known parent package
。我已将__init__.py
文件添加到父目录和bar_dir
目录
@ogogmad,你找到解决方案了吗?谢谢【参考方案2】:
您可以使用sys
和os
模块进行通用导入。在foo.py
中以行开头
import sys
import os
sys.path.append(os.path.abspath('../bar_dir'))
import bar
【讨论】:
请注意,这将使用 cwd 的同级目录,而不是foo.py
所在的同级目录。要使用脚本的目录,请使用sys.path.append(os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'bar')))
唯一在整个页面上起作用的东西。【参考方案3】:
如果您在 python 3+ 中遇到问题,使用sys.path.append("..")
对我有用。
sys.path.append("..")
from bar_dir import bar
【讨论】:
【参考方案4】:假设你有以下结构:
root
|_ productconst.py
|_ products
|_ __init__.py
如果您想在products.__init__
中导入productconst,则可以使用以下方法:
from ..productconst import *
【讨论】:
以上是关于如何从同级目录导入 Python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
从 Cloud Functions 中的父目录或同级目录导入模块?