python - "import package"的目的是什么?

标签 python import package

As I just found out import package 不会使包的模块通过 package.module 可用。 from package import subpackagefrom package import *

显然也是如此

如果我无法访问其子模块而只能访问 __init__.py 中定义的对象,那么导入包的目的是什么?

from package import * 会使命名空间膨胀,这对我来说很有意义,但是,这不适用于其他两种方式!我也明白加载所有子模块可能 take a long time .但我不知道这些不需要的副作用是什么,“只有在显式导入子模块时才会发生”,是上一个链接的作者提到的。 对我来说,如果我不想访问提供的对象,那么执行 import package[.subpackage](或 from package import subpackage)似乎完全没有意义__init__.py.

那些不需要的副作用真的那么严重,以至于语言实际上必须保护程序员免受它们的影响吗?其实我觉得Python更多的是“程序员想做就让他做”。 就我而言,我真的很想使用单个语句from package import subpackage 导入所有子模块,因为我需要所有的子模块! 在我看来,在 __init__.py 文件中告诉 Python 我在谈论哪些子模块(所有这些!)是相当麻烦的。

请赐教。 :)

最佳答案

是否在其 __init__.py 中自动导入子模块取决于包。例如 os 会自动导入 os.path,所以这是可行的:

import os
print os.path.abspath('somefile')

所以包的创建者可以决定什么是最好的。如果自动加载所有子模块需要相当长的时间并且很少需要,则可能不应该这样做。如果始终需要所有子模块,则可能应该自动导入它们。

如果您认为一个包导入不够,您可以通过编写自己的包装器模块来解决这个问题,它可以完成所有导入,然后将其与 from wrappermodule import * 一起使用。

关于python - "import package"的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2628783/

相关文章:

python - 如何测试某个日志消息是否记录在 Django 测试用例中?

python - 将 "true"(JSON) 转换为 Python 等效的 "True"

python - 如何在没有 root 的情况下在 Python 中挂载共享驱动器?

python - 安装的包窃取命名空间

python - 无法在 conda meta.yaml 文件中指定 pip 依赖项

python - Pytorch 运行时错误 : element 0 of tensors does not require grad and does not have a grad_fn

git - 如何将第三方库导入 git?

mysql - 如果系统不区分大小写,两个表名相同

python - 导入与文件同名的模块

installation - 向 cpack 添加额外命令 - NSIS 打包程序/安装程序