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

从父目录导入Python包

傅阳
2023-03-14
问题内容

我有以下源代码结构

/testapp/
/testapp/__init__.py
/testapp/testmsg.py
/testapp/sub/
/testapp/sub/__init__.py
/testapp/sub/testprinter.py

其中testmsg定义以下常量:

MSG = "Test message"

sub/testprinter.py

import testmsg

print("The message is: {0}".format(testmsg.MSG))

但是我越来越 ImportError: No module named testmsg

自包装结构以来,它不应该工作吗?我真的不想在每个子模块中扩展sys.path,甚至不想使用相对导入。

我在这里做错了什么?


问题答案:

这完全取决于您 运行的 脚本。该脚本的路径将自动添加到python的搜索路径。

使其具有以下结构:

TestApp/
TestApp/README
TestApp/LICENSE
TestApp/setup.py
TestApp/run_test.py
TestApp/testapp/__init__.py
TestApp/testapp/testmsg.py
TestApp/testapp/sub/
TestApp/testapp/sub/__init__.py
TestApp/testapp/sub/testprinter.py

然后TestApp/run_test.py 运行:

from testapp.sub.testprinter import functest ; functest()

然后TestApp/testapp/sub/testprinter.py可以做:

from testapp.testmsg import MSG
print("The message is: {0}".format(testmsg.MSG))

这里有更多好的提示;



 类似资料:
  • 问题内容: 我有以下内容: 我正在尝试从父目录导入。在这种情况下,我尝试从测试文件夹中运行“ UnitTest1.py”,并从其上方的目录(文件“ ModuleFile.py”)导入。 我知道已经有很多答案。 SO问题1,SO问题2,其他所有SO问题。我只是找不到“使用../”作为相对导入而不是显式路径。 我知道从Python 2.5开始,根据提到使用的文档,它们支持“相对导入”,但是我专门尝试这

  • 问题内容: 如何导入驻留在父目录中的模块(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中说: 您只需要在每个目录中放置命名

  • 问题内容: 我正在开发/测试本地目录中的软件包。我想将其导入解释器(v2.5),但是sys.path不包括当前目录。现在我输入。有没有更好的办法? 也, 失败并显示此错误: 问题答案: 您只能在从作为包的一部分导入的模块中使用相对导入-您的脚本或交互式解释器不是,因此,当然(这意味着“从与我导入的包相同的包中导入”)不会不行 将被罚款,一旦你确保父目录的是(你如何设法让你的当前目录 远 从我不知道

  • 我有一个名为的脚本,代码如下(我已经大大简化了事情): 但我不仅仅有一个名为的脚本。我有许多名为的脚本,按以下目录结构组织: 每个都有一个稍微不同的实现。我想对做的是通过导入每个脚本并对其运行一些测试来测试所有脚本。下面是一些代码(*'s表示伪代码) 我该怎么做?特别是,如何迭代导入脚本,例如,?