【问题标题】:Python 3: How to import from different folder/directoriesPython 3:如何从不同的文件夹/目录导入
【发布时间】:2018-12-29 15:30:54
【问题描述】:

我最近一直在使用 python 3,但我发现我无法从单独的文件夹中导入模块。有没有办法在文件夹细分中导入它? 为了提供有关此问题的更多上下文,这里是我要访问的“启动器”位置和文件夹:

Launcher.py
Folder
- program-to-import.py

这就是布局。如何从我的其他模块导入启动器?

【问题讨论】:

标签: python


【解决方案1】:

Python 非常简单地支持从子路径导入。 在 Launcher.py 中输入以下内容。

from Folder.program-to-import import *

【讨论】:

  • 1/ 如果Folder 不是一个包,这将不起作用。 2/ 通常不鼓励导入 *。
  • 此外,出于显而易见的原因,禁止在包或模块名称中使用 -。
  • @MadPhysicist 这个名字取自他的例子,我很清楚不应该使用 - 。 -ThierryLathuille 即使 Folder 不是一个包,这也确实有效。不鼓励导入 *,尽管用户没有说明要导入的文件夹的结构是什么,所以使用了 *。
  • 非常感谢您的回答。经过一些工作,我修改了所有程序并使其正常工作。我接触python的时间很短,所以希望大家能理解为什么我在这方面有点不了解。
【解决方案2】:

正如其他人所说,名称中的- 无效,如果您的文件名中有它们,请在删除它们后尝试导入。现在,我们称之为program_to_import

from folder import program_to_import

如果要从program_to_import 调用函数,请使用这个 -

program_to_import.function_to_call()

此外,查看documentation 总是一个好主意

您也可以尝试在文件夹中添加__init__.py__init.py__的使用如下-

init.py 文件是 Python 将目录视为包含包所必需的;这样做是为了防止具有通用名称(例如字符串)的目录无意中隐藏模块搜索路径上稍后(更深)出现的有效模块。在最简单的情况下,init.py 可以只是一个空文件,但它也可以执行包的初始化代码或设置 all 变量,稍后介绍。 p>

【讨论】:

  • 如果不将__init__.py 添加到folder,这是否有效?
  • 1/ 如果 Folder 不是一个包,这将不起作用。 2/ 正如@Mad Physicist 已经指出的,- 在名称中是被禁止的。
  • @ThierryLathuille - 名称由 OP 询问
  • N@ThatBird 不,如果Folder 不包含__init__.py 文件(即使是空的),它也不会被视为一个包,因此以这种方式导入将不起作用。 OP 建议的文件名不能使用,因为它包含-,所以告诉他很重要。
  • 不是你的工作本身,但当你决定发布一个好的答案时,这大概是你自愿接受的负担:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 2016-02-19
相关资源
最近更新 更多