从父文件夹导入模块

1086

我正在运行Python 2.5。

这是我的文件夹树:

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

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

我应该如何从life模块内部导入nib模块?我希望能在不修改sys.path的情况下完成。

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


2
罗斯: 我看过那里了。我该怎么办?我已经有__init__.py文件了。S.Lott: 我不知道该如何检查... - Ram Rachum
4
在shell中输入“echo $PYTHONPATH”,在Python中输入“import sys; print sys.path”,这两个命令可以输出当前系统的Python模块搜索路径。相关信息可以在此链接查看:http://docs.python.org/tutorial/modules.html?highlight=pythonpath#modules - S.Lott
20
我强烈推荐跳过所有关于 sys.path 或者 PYTHONPATH 的答案,查看 np8 的优秀回答。是的,它很长。是的,看起来需要很多工作。但这是唯一一个真正正确且干净地解决问题的答案。 - Aran-Fey
9
可执行的伪代码到底发生了什么?为什么在Python中从父文件夹导入模块如此麻烦?这太荒谬了。 - eric
15
为什么这件事这么麻烦?读完所有的讨论和答案后,仍然没有合理简单的解决方案。 - Apollys supports Monica
显示剩余10条评论
32个回答

-1
在IDE(PyCharm)和使用相同导入的Docker中,对我有效的唯一解决方案是在.ini文件中配置根文件夹,如per pytest official docs所述。
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["."]
背景:项目中有两个层级深的测试文件夹,试图从根项目路径导入主要代码(意思是没有src文件夹或类似的)。 需要使其能够与命令行界面(CLI)兼容、与操作系统无关、与集成开发环境(IDE)无关,并且需要能够在 Docker 中使用相同的导入语句进行导入

-4

这对我来说可以从更高的文件夹导入东西。

import os
os.chdir('..')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接