您不能 在 包中使用脚本;你在跑步test
, 不是 test.test
。因此,顶层脚本不能使用相对导入。
如果你想运行包作为一个脚本,你需要移动test/test.py
到testpackage/__main__.py
,在你的shell移动一个目录时~/Desktop
,告诉Python来运行一个包python -m testpackage
。
演示:
$ ls testpackage/
__init__.py __main__.py __pycache__ controller.py
$ cat testpackage/controller.py
class Controller:
def __init__(self):
pass
$ cat testpackage/__init__.py
# -*- coding: utf-8 -*-
$ cat testpackage/__main__.py
from .controller import Controller
if __name__ == '__main__':
print('running...')
$ python3.3 -m testpackage
running...
您无法命名包裹test
; Python已经为测试套件提供了这样一个软件包,可以在找到当前工作目录中的软件包之前找到它。
另一种方法是在包 外部 创建脚本,然后从脚本导入包。