当前位置: 首页 > 面试题库 >

从父目录导入Python

秦景同
2023-03-14
问题内容

我有以下内容:

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

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

  • 我知道已经有很多答案。 SO问题1,SO问题2,其他所有SO问题。我只是找不到“使用../”作为相对导入而不是显式路径。
  • 我知道从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。

问题答案:

不要从tests文件夹运行测试。从项目的根目录(即模块文件夹)运行它。您应该很少需要 使用
sys.path或来进行处理PYTHONPATH,而当您这样做时,要么是在导致其他库的bug,要么使用户的生活更加艰难。

python -m TestsFolder.UnitTest1

如果使用像py.test这样的测试运行程序,则可以py.test从结帐的根开始运行,它会为您找到测试。(假设您为测试test_unit1.py命名的方式更像。您当前的命名方式有点不合常规。)



 类似资料:
  • 问题内容: 如何导入驻留在父目录中的模块(python文件)? 这两个目录中都有文件,但是我仍然无法从父目录导入文件? 在此文件夹布局中,脚本B尝试导入脚本A: 脚本B中的以下代码不起作用: 问题答案: 您无需在Python中导入脚本,而可以导入模块。一些python模块也是可以直接运行的脚本(它们在模块级别上做了一些有用的工作)。 通常,最好使用绝对进口,而不是相对进口。 在: 如果您想作为脚本

  • 问题内容: 如何从父目录进行相对导入? 来自: 这给出了一个模棱两可的错误: 如何从父目录本地导入? 问题答案: 感谢您添加到您的问题。首先是一个答案,然后是一些解释。我建立了您的代码, 去获得,就像你拥有它一样。(我忽略了错误消息。) 如您所愿,将导入行设置回“ ../../../meme”。 (注释掉一些包含未使用变量的代码。) 然后在梅梅/ CMD /米姆目录,要么或者工作。 刚才我说去安装

  • 问题内容: 我有这个main.go文件: 我有这个目录结构: 当我使用以下命令构建项目时: 我收到此编译错误: src / main / main.go:3:8:/ home / oleg / codes / oresoftware / oredoc / test / builds / go / src / one / entities / bar中没有Go文件 该错误是有道理的。有什么方法可以从

  • 问题内容: 我有一个名为“ ClassA”的Python类,另一个应该导入“ A ClassB”的ClassA的Python类。目录结构如下: 我将如何使用,以便ClassB可以使用ClassA? 问题答案: 您确实应该使用软件包。然后将MainDir放置在文件系统中sys.path上的某个点(例如… / site- packages)上,然后可以在ClassB中说: 您只需要在每个目录中放置命名

  • 我试图将一个类从父目录导入到我的脚本中,但是我收到了< code >尝试相对导入,但没有已知的父包错误,我已经在互联网上到处搜索,但仍然无法修复该错误。这是我的包结构: 现在假设我在模块中有class 1,并且我正在尝试将其导入模块中。我已经尝试过: 但是我得到上面的错误消息,我已尝试将A文件夹添加到,但仍然是相同的错误。任何人都可以解释如何将包从函数或类从父目录导入子目录(例如从 导入)

  • 我有一个这样的文件结构: 在笔记本中的文件我想从和。 我已经找到了这个问题的答案,可以在每个笔记本中使用以下代码行,并每次将这些代码行作为第一个单元格运行: 有没有更好的办法?如果我有很多笔记本中的文件文件夹,我是否必须将这些代码行粘贴到每一行的开头?有更好、更简约或更干净的方法吗?