对于这个基本问题,我很抱歉,因为它与此类似: Stumped by relative imports
但我想跟着PEP328 http://www.python.org/dev/peps/pep-0328/#guido-s-decision 但这对我不起作用:(
这些是我的档案:
dev@desktop:~/Desktop/test$ ls
controller.py __init__.py test.py
2to3说的都是对的:
^{pr2}$文件内容:
dev@desktop:~/Desktop/test$ cat controller.py
class Controller:
def __init__(self):
pass
dev@desktop:~/Desktop/test$ cat __init__.py
# -*- coding: utf-8 -*-
dev@desktop:~/Desktop/test$ cat test.py
#!/usr/bin/env python
from .controller import Controller
if __name__ == '__main__':
print('running...')
但它的输入不起作用:
dev@desktop:~/Desktop/test$ python3 test.py
Traceback (most recent call last):
File "test.py", line 2, in <module>
from .controller import Controller
ValueError: Attempted relative import in non-package
dev@desktop:~/Desktop/test$
感谢任何帮助!提前谢谢!在
这并不是真正的主题,但是为了测试您的代码,我建议您看看本文Testing your code和{a2}的主题
不能在包中使用脚本;您正在运行
test
,而不是test.test
。因此,顶级脚本不能使用相对导入。在如果希望将包作为脚本运行,则需要将
test/test.py
移到testpackage/__main__.py
,将shell中的一个目录向上移动到~/Desktop
,并告诉python使用python -m testpackage
运行包。在演示:
不能将包命名为
test
;Python已经为测试套件准备了这样一个包,在找到当前工作目录中的包之前就会找到它。在另一种方法是在包的外部创建一个脚本,然后从脚本导入包。在
相关问题 更多 >
编程相关推荐