【问题标题】:Python refer to module with partial pathPython 引用具有部分路径的模块
【发布时间】:2020-12-14 20:59:10
【问题描述】:

我有这个目录结构:

├── package1
│   ├── __init__.py
│   └── package2
│       ├── __init__.py
│       └── module2.py
└── script.py

script.py 文件如下所示:

import package1.package2.module2
import package1.package2

if __name__ == '__main__':
    package1.package2.module2.run()  # This works
    package2.module2.run()           # This fails

执行失败并出现此错误,NameError: name 'package2' is not defined。

如何更改代码以使package2.module2 被识别为导入模块?

【问题讨论】:

  • 您是否尝试过使用文档中的前导点符号?我不明白为什么您所布置的内容不起作用。有什么错误? docs.python.org/3/reference/…
  • 用错误信息 NameError: name 'package2' is not defined 更新了问题。
  • @Steve :似乎没有package2 目录,其中包含module2 文件。这可能是错误的原因。
  • @LakshyaRaj 明白了。最初问题的原因是为了提高部分路径的可读性,而不会对完整路径变得过于冗长。
  • @Steve :所以我们可以假设它存在于那个位置,对吧?

标签: python python-import


【解决方案1】:

这个 script.py 被错误地认为 package2 名称会突然出现 - 显示的导入语句只会将名称 package1 带入命名空间。

它可以改用from package1 import package2,这样package2就在命名空间中。在这种情况下,单独导入module2still required

最典型的是单个导入语句:

from package1.package2.module2 import run

if __name__ == "__main__":
    run()

【讨论】:

  • 是的,它可以工作,但你是对的——我需要在使用部分路径表示法时同时导入包和模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 2013-02-23
相关资源
最近更新 更多