2013-02-02 28 views
27

我有一个名为extended.py模块,它包含以下行:“非包尝试相对进口”在一个目录

from .basic import BasicModule 

basic.py驻留在同一目录中的文件__init__.py

python extended.py 

我得到的错误:

ValueError: Attempted relative import in non-package 

还加入一行:

from __future__ import absolute_import 

不能解决问题但是,当我尝试运行它。 也许我太累了,看不到明显的 - 但我没有看到问题在这里。

+1

可能的重复[试图相对导入非包甚至\ _ \ _ init \ _ \ _。py](http://stackoverflow.com/questions/11536764/attempted-relative-import-in-non- package-even-with-init-py) – BrenBarn

+0

'python -m parent_directory.extended'? – SparkAndShine

+0

可能重复的[如何在Python中执行相对导入?](http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python) –

回答

47

相对导入仅适用于软件包,但是当您导入extended.py时,您正在运行顶级模块

当前目录可能包含__init__.py文件,但该文件不会使exended.py包成为其中的一部分。

对于某些需要考虑的软件包,您需要导入目录名称。下面将工作:

main.py 

packagename\ 
    __init__.py 
    basic.py 
    extended.py 

然后在main.py地说:

import packagename.extended 

只有然后是包的一部分extended,做相对进口工作。

相对导入现在有一些相对的packagename父。

+3

但是我怎么能够运行'在这种情况下单位测试?我是否需要为这些导入情况指定一个python参数(-m)? – Alex

+0

对于未在包中定义的任何内容,请勿使用相对导入,而应使用绝对导入。 unittest脚本不是包的一部分,它是一个外部脚本。 –

+0

我一直以为应该把单元测试放在同一个模块内? python与unitest有一个好习惯还是一个PEP? – Alex

相关问题