gpt4 book ai didi

从父目录导入 Python

转载 作者:IT老高 更新时间:2023-10-28 20:51:51 25 4
gpt4 key购买 nike

我有以下几点:

         ModuleFolder
|
|-->. ModuleFile.py .
|
'-->. TestsFolder .
|
'---> UnitTest1.py

我正在尝试从父目录导入。在这种情况下,我尝试从测试文件夹运行“UnitTest1.py”,并从其正上方的目录(文件“ModuleFile.py”)导入。

  • 我知道已经有很多答案了。 SO Question1 , SO Question2 , Every Other SO Question .我只是找不到“使用../”作为相对导入而不是显式路径。
  • 我知道,从 Python 2.5 开始,他们支持“相对导入”,根据文档中提到使用 from .. import * 但我特别尝试执行 import MyModuleName 这样我就可以在单元测试中更加明确,避免名称困惑/冲突。

我正在做的(并且对我有用)如下:

sys.path.append("../")

然后从父目录导入我需要的东西。

  • 是的,在父目录中有一个__init__.py,
  • 不,我的父路径不是 Python 路径或环境变量的一部分
  • 我为什么不直接将父路径添加到 sys.path 中?因为是相对的。如果我从/home/workspace/MyModule/unittests/运行并且我的模块位于/home/workspace/MyModule/下,我假设如果同事运行此路径,则将/home/workspace/MyModule/添加到路径不一定是真的在他自己的/home/documents/MyModule 目录下的机器上。

我的问题:

这是 Python 专有的吗?如果不是,这有什么问题。有没有更好的办法?或者这真的是一个 RTFM 时刻,答案就在我已经看过的 7 个以上 SO 问题之一中? (我看到那些都推荐显式路径而不是我采用的相对路径方法)。

其他有用信息:

  • Python 2.6
  • 在 Linux 中工作,但也可以轻松跳到 Win。

最佳答案

不要从测试文件夹运行测试。从项目的根目录运行它,即模块文件夹。你应该很少需要使用 either sys.pathPYTHONPATH,当你这样做时,你要么给其他库造成错误 future 或让您的用户生活更艰难。

python -m TestsFolder.UnitTest1

如果您使用像 py.test 这样的测试运行器,您只需从结帐的根目录运行 py.test ,它就会为您找到测试。 (假设您将测试命名为更像 test_unit1.py。您当前的命名方案有点不正统。;))

关于从父目录导入 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com