【问题标题】:Python importing everything from module subdirectoryPython从模块子目录中导入所有内容
【发布时间】:2012-02-15 15:25:06
【问题描述】:

我正在尝试从一个子目录导入所有文件,所以我想我可以在该子目录中写入__init__.py 来导入文件。但是,当我这样做时,它似乎没有导入任何东西。

文件结构:

prog.py
module/
    __init__.py
    code.py

prog.py 的代码:pass

__init__.py 的代码:import code

code.py 的代码:print('hello')

当我运行 prog.py 时,什么也没有发生。为什么不打印hello,有没有更好的方法可以轻松地从子目录中导入所有内容?

【问题讨论】:

  • 你的文件结构没有显示任何目录...
  • 谢谢,这是一个疏忽。固定。

标签: python import subdirectory


【解决方案1】:

假设你有这样的文件结构:

prog.py
module/
    __init__.py
    code.py

然后import module 将导入module/__init__.py 中的代码,import module.codefrom module import code 将在本地名称“module.code”或“code”下导入module/code.py 中的代码。

【讨论】:

  • 我意识到这一点,但它没有回答我的任何一个问题。
【解决方案2】:

如果你有以下结构:

package
  __init__.py
  module.py

__init__.py 你可以试试这个:

import package.module

或者这个:

from . import module

这样,如果package 在您的PYTHONPATH 中,您将获得预期的行为:

>>> import package
hello

【讨论】:

  • 我意识到这一点,但它没有回答我的任何一个问题。
  • 再次阅读您的问题,我看到prog.py 仅包含pass(没有import 语句)并且您只是在运行prog.py。对吗?
  • 是的。据我了解,__init__.py 无论如何都应该运行,然后从子目录中导入code.py,因此 prog 可以访问。
  • @Whef 你必须显式导入包(即使它被称为module,请注意它是包)才能执行__init__.py中的代码。
【解决方案3】:

把这个放在prog.py:

import module

Python 只会加载导入的包或模块。

要使其发挥作用,您可能还需要 jcollado 的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 2015-07-23
    • 2017-03-18
    • 2011-05-06
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多