这是一个涉及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还将加载ec2包的boto子模块,并将其分配给ec2命名空间中的boto变量。由于每个导入boto的模块都共享相同的boto包,因此它们都将看到此新添加项。

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

10-12 22:17