【问题标题】:How to do imports in python?如何在python中进行导入?
【发布时间】:2013-01-10 16:36:24
【问题描述】:

我做了一些网络搜索,但我发现的只是沮丧

我在目录(我们称之为)“projectdir”中有一个项目,其中有“main.py”。 在 projectdir 中,我有一个名为“otherstuff”的子目录,其中有“foo.py”。

我如何导入 foo.py,这样我就可以在 main.py 中使用它的内容,而无需做 python 设计者/实现者应该做的很多工作,也不依赖样板文件?

或者这在 python 中是不可能的?

【问题讨论】:

  • from otherstuff import foo?
  • @BrtH: 然后呢?: from otherstuff from foo import MyClass ?
  • 对不起,我只是对 python 是一种 ****** 语言感到愤怒。我不得不把它放在那里。尝试将其推送到几个文件和 100 行之外的任何内容,并且必须引入比 C++ 具有的更丑陋的样板,甚至可以自动执行该语言应该做的事情。
  • 我不知道你认为你需要什么“样板”。我经常处理包含数百行文件的许多文件的项目,并且从不需要“样板文件”。但如果你不喜欢 Python,就不要使用它:生气也没用。

标签: python import


【解决方案1】:

您需要将__init__.py 文件放在otherstuff 子目录中,以将其标记为包。之后,您可以使用以下命令导入模块:

import subdirectory.foo

from subdirectory import foo

__init__.py 文件可以为空。在 python 中没有其他“干净”的方法可以实现这一点。

【讨论】:

  • 技术上不正确,你可以将文件夹添加到 python 路径中,但这很丑,而且是个坏主意。
  • 即使目录中的文件在逻辑上不是一个模块?
  • 嗯,文件不需要是“逻辑”意义上的模块。唯一的限制是它们的名称以“.py”结尾并包含可执行(可解释的)python 代码。
  • 我可以“打印 otherstuff.foo.ASD”,但如何才能“打印 ASD”?
  • @user1358 你想做from otherstuff.foo import ASDfrom 语法告诉 Python 将其拉入模块的命名空间。
【解决方案2】:

您需要将__init__.py 包含在您的otherstuff 目录中。这是告诉 python 在那里搜索导入。

python documentation 解释了模块/包导入的工作原理。值得花时间阅读它,尽管它的篇幅很长

【讨论】:

  • 然后只是“import otherstuff.foo”?
  • 好的,我可以“打印 otherstuff.foo.ASD”,但如何才能“打印 ASD”?
  • from otherstuff.foo import ASD?
猜你喜欢
  • 2021-10-19
  • 2011-03-16
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多