Python3:尝试以非包形式进行相对导入

Costales

我对此基本问题感到非常抱歉,因为它与以下内容类似:受相对进口困扰

但是我正在尝试遵循PEP328 http://www.python.org/dev/peps/pep-0328/#guido-s-decision,它对我不起作用:(

这些是我的文件:

dev@desktop:~/Desktop/test$ ls
controller.py  __init__.py  test.py

2to3说的没错:

dev@desktop:~/Desktop/test$ 2to3 .
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: No files need to be modified.

文件内容:

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$ 

任何帮助表示赞赏!提前致谢!

马丁·彼得斯(Martijn Pieters)

您不能包中使用脚本你在跑步test不是 test.test因此,顶层脚本不能使用相对导入。

如果你想运行包作为一个脚本,你需要移动test/test.pytestpackage/__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已经为测试套件提供了这样一个程序包,可以在找到当前工作目录中的程序包之前找到它。

另一种方法是在包外部创建脚本,然后从脚本中导入包。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ValueError:尝试以非包形式进行相对导入,以在Flask Web App中运行独立脚本

ValueError:尝试在非包中进行相对导入 - 在 python 中进行相对导入

即使使用__init__.py,也如何解决“尝试以非软件包方式进行相对导入”

即使使用__init__.py,也如何解决“尝试以非软件包方式进行相对导入”

Python 2 imp-ValueError:尝试在非包中进行相对导入

尝试在顶级包 python 之外进行相对导入

ValueError:键font.fantasy:尝试在Mercurial中的非包中进行相对导入

“尝试在顶级包之外进行相对导入”

Python/Flask ImportError:尝试在没有已知父包的情况下进行相对导入

尝试使路径起作用-尝试相对顶级包进行相对导入

如何解决python路径错误:尝试在没有已知父包的情况下进行相对导入

Django 模型导入错误:ValueError:尝试在顶级包之外进行相对导入

ImportError:尝试在烧瓶中没有已知父包的情况下进行相对导入

如何解决:尝试在没有已知父包的情况下进行相对导入

尝试在当前结构的非包装错误中进行相对导入

Python3相对导入包失败

ValueError:尝试从 django 中的另一个应用程序导入模型时,尝试在顶级包之外进行相对导入

如何在Python中进行相对导入?

使用 Jupyter notebook 在 python 中进行相对导入

如何从父目录进行相对导入?

使用本地ang全局库在python中进行相对导入

python包中的相对导入

Python3:相对导入超出顶级

尝试了相对于顶级包的相对导入

从Python解释器运行时,出现“ ImportError:尝试相对导入,没有已知的父包”

Flask / Python错误:运行Flask时尝试相对导入且没有已知的父包

在python3中的特定路径中导入包

Python3关于导入自定义包的问题

Python 3中的相对导入