擅长:python、mysql、java
<p>不能在包中使用脚本;您正在运行<code>test</code>,<em>而不是</em><code>test.test</code>。因此,顶级脚本不能使用相对导入。在</p>
<p>如果希望将包作为脚本运行,则需要将<code>test/test.py</code>移到<code>testpackage/__main__.py</code>,将shell中的一个目录向上移动到<code>~/Desktop</code>,并告诉python使用<code>python -m testpackage</code>运行包。在</p>
<p>演示:</p>
<pre><code>$ 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...
</code></pre>
<p>不能将包命名为<code>test</code>;Python已经为测试套件准备了这样一个包,在找到当前工作目录中的包之前就会找到它。在</p>
<p>另一种方法是在包的</em>外部创建一个脚本,然后从脚本导入包。在</p>