从父文件夹导入模块

2024-05-20 18:43:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行Python2.5。

这是我的文件夹树:

ptdraft/
  nib.py
  simulations/
    life/
      life.py

(我在每个文件夹中都有__init__.py,为了可读性这里省略)

如何从life模块内部导入nib模块?我希望不用修改sys.path就可以做到。

注意:正在运行的主模块位于ptdraft文件夹中。


Tags: 模块pathpy文件夹initsys省略可读性
3条回答

相对导入(如from .. import mymodule)只在包中工作。 要导入当前模块的父目录中的“mymodule”:

import os,sys,inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0,parentdir) 

import mymodule

编辑:并非总是给出__file__属性。我现在建议使用inspect模块来检索当前文件的文件名(和路径),而不是使用os.path.abspath(__file__)

可以使用相对导入(python>;=2.5):

from ... import nib

(What’s New in Python 2.5) PEP 328: Absolute and Relative Imports

编辑:添加另一个点“.”以向上移动两个包

这个问题似乎与模块位于父目录或类似目录中无关。

您需要将包含ptdraft的目录添加到PYTHONPATH

你说import nib和你一起工作,这可能意味着你在PYTHONPATH中添加了ptdraft本身(不是它的父级)。

相关问题 更多 >