将文件作为包导入 - Python

时间:2015-04-21 18:58:24

标签: python

我有以下目录结构:

/testlib
    __init__.py
    ec2.py
    unit/
       __init__.py
       test_ec2.py
    utils/
       __init__.py

我正在尝试为unittest创建ec2.py课程:

import ec2

class TestEC2(unittest.TestCase):

    def setUp(self):
        self.ec2obj = ec2.EC2(name="testlib_unittest")

if __name__ == '__main__':
    unittest.main()

但是,当我执行test_ec2.py时,我收到以下错误:

python unit/test_ec2.py 
Traceback (most recent call last):
  File "unit/test_ec2.py", line 4, in <module>
    import ec2
ImportError: No module named ec2

我仍然不明白我为什么会这样做,因为我在目录中正确设置了__init__.py__init__.py文件完全为空:我已使用touch __init__.py创建了这些文件。有线索吗?

****更新**** 以下是一些建议:

/testlib# python unit/test_ec2.py 
Traceback (most recent call last):
  File "unit/test_ec2.py", line 4, in <module>
    from ..ec2 import EC2
ValueError: Attempted relative import in non-package

testlib# python unit/test_ec2.py 
Traceback (most recent call last):
  File "unit/test_ec2.py", line 4, in <module>
    import testlib.ec2 as ec2
ImportError: No module named testlib.ec2

2 个答案:

答案 0 :(得分:2)

由于您未正确运行脚本,因此无法找到该模块。在testlib/中运行以下内容:

python -m unit.test_ec2

答案 1 :(得分:0)

Python不会在您上面的目录中查找文件。 Ignacio的回答是正确的,请参阅this进行详细说明。