如何从同级目录导入 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】:

您可以使用sysos 模块进行通用导入。在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 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python3中正确导入同一目录下的模块

如何在python3中正确导入同一目录下的模块

无法从同级目录导入图像 - React Native

从 Cloud Functions 中的父目录或同级目录导入模块?

如何在 python 脚本中将 .obj 文件从搅拌机导入搅拌机游戏引擎

关于使用python脚本将同级的其他目录下的所有文件根据年份移动到当脚本位置的年份目录