作者yungyuc (酷狗喵千代)
看板Python
标题Re: [问题] import 上层资料夹的module?
时间Mon Feb 4 20:34:50 2008
※ 引述《StubbornLin (Victor)》之铭言:
: ※ 引述《yungyuc (酷狗喵千代)》之铭言:
: : 一般我是用 insert(0,'blah'),才不会被 $PYTHONPATH 挡住 :-)
: : 不须要是绝对路径:
: : <module 'testmod' from '..\testmod.py'>
: : 你想要的 relative import 去年 (还是前年?) 在 python-dev 结束讨论,
: : 结论是 PEP328,Python 2.5 有实作。
: : 不过经过我长时间的测试 ... 最近又改回用 absolute import。
: : 这个功能确实有它的用处,解决了一些问题,但不能说是很有用。
: : 你会想用 relative import,看起来是因为程式码组织得不好,
: : 用了 relative import 可能反而容易出问题,程式也容易乱。
: : relative import 大概只适合用来避开 recursive import 死结的发生,
: : 而且在 refactor 程式结构的时候还很容易出包。
: : 我建议善用 package。
: 我有使用package,可是他抓不到上层的pageage阿
: 上面一层是amazon
: from amazon.WebRequest import *
: from amazon.Database import *
: 这japan这pacakge的资料夹里的module要import amazon就import不到
: 其实我在eslipse里专案执行的话就可以,可是在外面单独跑没有用
: 他会说找不到amazon
: 是我弄错了什麽吗?
: 基本上我会这样分,是因为有不同国家的网站,不想全部放在一个资料夹,所以变成
: amazon
: ┌──┼───┐
: japan us other...
: 下层的japan等会import amazon的一些class进来inherit修改成适合japan的module
: 因为他们都来自amazon,而amazon只有一个,而且大家都引用它
: 所以如果是这样的话,应该怎样的做才对?
所以说你大概没搞清楚 package 该怎麽用 :)
PEP328 里面讲得很清楚。虽然它的焦点在 relative import,
不过读通了就知道这个问题该怎麽解。
假设 hierachy 为
project/
`-- amazon
|-- china
|-- japan
`-- sos
如果你不想修 sys.path,在 invoke script 的时候,你的 cwd 必须是 project。
因为在现有的 import 规则下,cwd 的内容会第一个被 scan。
在 china 这一层,事实上是在你 package 里任何一层,都可以用
import amazon 来存取它的内容。
在 py3k 里关於 cwd 的规则会改变。在 py3k 里 import 时 cwd 永远不会被 scan。
why? explicit is better than implicit.
caveat: cwd != .
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 164.107.249.126
※ 编辑: yungyuc 来自: 164.107.249.126 (02/04 20:36)
1F:推 yzugsr:推 讲的很清楚 02/04 23:20