[相对导入]

2014-06-23 17:48:47 +08:00
 1989922yan
.
├── h
│   ├── __init__.py
│   └── out.py
├── hh
│   ├── __init__.py
│   └── test.py
├── __init__.py
└── test.py


我有这样的目录结构,

# h/out.py
from ..test import h

h()

# test.py
#coding=utf8

def h():
print 'hllo'

_---------------

我在 test.py目录,执行 python h/out.py

Traceback (most recent call last):
File "h/out.py", line 1, in <module>
from ..hh import test
ValueError: Attempted relative import in non-package


----------------

这是 相对导入啊,这个怎么处理呢?
4344 次点击
所在节点    Python
6 条回复
TankyWoo
2014-06-23 18:33:13 +08:00
» tree pack
pack
├── h
│   ├── __init__.py
│   └── out.py
├── __init__.py
└── test.py

1 directory, 4 files

» python -m pack.h.out
hello
cj1324
2014-06-23 20:58:49 +08:00
不推荐相对导入。。
wynemo
2014-06-23 21:21:53 +08:00
直接运行包里的东西 比如这样 python h/out.py 会报“Attempted relative import in non-package”
而这样 python -m h.out 会报"Attempted relative import beyond toplevel package"
真要跑就照一楼这样跑吧。。。
要把整个这一坨当成一个包 才能用relative import
1989922yan
2014-06-25 17:29:41 +08:00
@TankyWoo
赞,这是个好办法
1989922yan
2014-06-25 17:30:09 +08:00
@cj1324

显示相对导入 ,还是可以容忍的
1989922yan
2014-06-25 17:31:00 +08:00
@wynemo
嗯的~~
已经照一楼完成,不过,总感觉有些失落。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/119105

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX