所需的目录树:
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包。这更像是一个“文件集合”的方法。
您如何设置测试以在此目录结构中工作?
答案 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)
快速而肮脏的方式:创建符号链接