gpt4 book ai didi

python - a.py 中的导入会影响 b.py 中的模块查找吗?

转载 作者:太空宇宙 更新时间:2023-11-04 10:24:03 25 4
gpt4 key购买 nike

这是一个涉及 boto 的测试示例(尽管我认为这不是特定于 boto 的)。首先创建一个简单的 python 文件:

echo "import boto; print boto.ec2.RegionData" > bad.py

然后如果你尝试导入这个模块,你会得到一个错误:

python -c "import bad"
AttributeError: 'module' object has no attribute 'ec2'

这是预料之中的,因为 bad.py 忘记了“导入 boto.ec2”。但是,如果您在“import bad”之前“import boto.ec2”,它会令人惊讶地工作:

python -c "import boto.ec2; import bad"

这是怎么回事?我的理解是从一个文件导入只会填充该文件的命名空间,但这一定是错误的。

版本:

  • python 2.7
  • boto 2.13.3

顺便说一句,我能够用我自己的虚拟版本的 boto 重现这个,那基本上只是空白文件,所以我不认为这是一个特定于 boto 的问题。

最佳答案

在一个文件中导入模块不会将其加载到其他文件的命名空间中 - 但 import botoimport boto.ec2 都只添加 boto 包到当前命名空间。不同的是import boto.ec2同时加载了boto包的ec2子模块,并赋值给ec2 boto 命名空间中的变量。由于导入 boto 的每个模块都共享相同的 boto 包,因此它们都可以看到这个新增内容。

关于python - a.py 中的导入会影响 b.py 中的模块查找吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30537621/

25 4 0
文章推荐: python - 使用 Scipy 对非线性函数进行约束优化
文章推荐: java - 为什么 List 不能作为 List 接受?