如何使用内置的“test / main.py”主函数创建python包?

时间:2010-06-20 14:59:31

标签: python unit-testing module packages

所需的目录树:

Fibo
|-- src
|   `-- Fibo.py
`-- test
    `-- main.py

我想要的是在进入测试后调用python main.py并执行main.py将运行此包的所有单元测试。

目前如果我这样做:

import Fibo

def main():
    Fibo.fib(100)

if __name__ == "__main__":
    main()

我收到错误:“ImportError: No module named Fibo”。

但如果我这样做:

import sys

def main():
    sys.path.append("/home/tsmith/svn/usefuldsp/trunk/Labs/Fibo/src")
    import Fibo
    Fibo.fib(100)

if __name__ == "__main__":
    main()

这似乎解决了我的错误。我可以前进......但这不是一个python包。这更像是一个“文件集合”的方法。

您如何设置测试以在此目录结构中工作?

3 个答案:

答案 0 :(得分:1)

如果我想导入一个位于我正在评估的文件的固定相对位置的模块,我经常这样做:

try:
    import Fibo
except ImportError:
    import sys
    from os.path import join, abspath, dirname
    parentpath = abspath(join(dirname(__file__), '..'))
    srcpath = join(parentpath, 'src')
    sys.path.append(srcpath)
    import Fibo

def main():
    Fibo.fib(100)

if __name__ == "__main__":
    main()

如果你想成为一个好的名称空间 - 公民,你可以在del区块的末尾except不再需要的符号。

答案 1 :(得分:0)

/home/tsmith/svn/usefuldsp/trunk/Labs/Fibo/src添加到PYTHONPATH环境变量中 会允许你写

import Fibo

def main():
    Fibo.fib(100)

if __name__ == "__main__":
    main()

并正确导入.../Fibo/src/Fibo.py

答案 2 :(得分:0)

快速而肮脏的方式:创建符号链接