这是一个涉及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 boto
和import boto.ec2
都只会将boto
包添加到当前名称空间中。区别在于import boto.ec2
还将加载ec2
包的boto
子模块,并将其分配给ec2
命名空间中的boto
变量。由于每个导入boto
的模块都共享相同的boto
包,因此它们都将看到此新添加项。
关于python - 导入a.py是否会影响b.py中的模块查找?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30537621/