【发布时间】:2015-05-30 04:05:30
【问题描述】:
这是一个涉及 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 忘记了“import boto.ec2”。但是,如果您在“import bad”之前“import boto.ec2”,它会起作用,令人惊讶的是:
python -c "import boto.ec2; import bad"
这是怎么回事?我的理解是从一个文件导入只会填充该文件的命名空间,但这一定是错误的。
版本:
- python 2.7
- boto 2.13.3
顺便说一句,我能够用我自己的 boto 虚拟版本来重现这个,基本上只是空白文件,所以我认为这不是 boto 特定的问题。
【问题讨论】:
-
因为你已经将
boto.ec2导入到命名空间中 -
但是如果你在 bad.py 中“打印 sys.path”,然后“import sys; import bad”,那是行不通的。所以还有更多的事情要做。
-
这不是一回事,试试
echo "import tkinter;print(tkinter.messagebox)" > bad.py,你会得到完全相同的行为
标签: python python-2.7 boto