作者cccx (ccc)
看板Python
标题Re: [问题] import 上层资料夹的module?
时间Fri Mar 5 17:29:55 2010
借用一下这个标题
我把原作者的架构延伸成下图
(绿色代表可执行)
Outside/
|-
run_more_outside.py
|
`-
Project/
|- __init__.py
|-
run_outside.py
|
`-
Amazon/
|- __init__.py
|-
main.py
|- GlobalFunc.py
|
|-
Japan/
| |- __init__.py
| `-
JapanShow.py
|
`-
TemplateFunc/
|- __init__.py
`- TemplateShow.py
假设 JapanShow.py 是提供外部使用的函式
本身会用到上层的 GlobalFunc.py
及 TemplateFunc/TemplateShow.py
我试了一些不同的可能,并找到一个可行的做法
可是我并不是很喜欢这样的程式写法
想请问板友们有没有漂亮的做法
底下是我试出来的结果
#--- JapanShow.py ---
主要修改蓝色部分
if __name__ == '__main__':
import sys
sys.path.insert(0, '..')
try:
from .. import GlobalFunc
from ..TemplateFunc import TemplateShow
except ValueError:
import GlobalFunc
from TemplateFunc import TemplateShow
def Show(mess):
# API
TemplateShow.Show("Japan", mess, GlobalFunc.Mark())
if __name__ == '__main__':
Show('Japan')
#--- GlobalFunc.py ---
def Mark():
return '(Global)'
#--- TemplateShow.py ---
def Show(name, mess, mark):
print '[%s] %s %s' % (name, mess, mark)
#--- main.py ---
from Japan
import JapanShow
JapanShow.Show('main')
#--- run_outside.py ---
from Amazon.Japan
import JapanShow
JapanShow.Show("outside")
#--- run_more_outside.py ---
from Project.Amazon.Japan
import JapanShow
JapanShow.Show("more_outside")
底下是各个档案的执行结果:
JapanShow.py: [Japan] Japan (Global)
main.py: [Japan] main (Global)
run_outside.py: [Japan] outside (Global)
run_more_outside.py: [Japan] more_outside (Global)
以上是所有程式的内容
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.25.181.65
1F:→ cccx:如果只有Amazon资料夹以外的程式要使用API的话 03/05 17:42
2F:→ cccx:写 from .. import xxx 就够了 03/05 17:43
3F:→ cccx:但如果自己或main.py要使用API 就要加sys和except那段 03/05 17:44
※ 编辑: cccx 来自: 114.25.181.65 (03/05 17:47)
4F:推 grtfor:推一下这篇,另外ValueError是不是应该改成ImportError ? 06/29 11:06
5F:推 grtfor:我发现增加sys.path的方式,是以执行位置来开始算.. 07/01 10:46
6F:→ grtfor:也就是会造成在该目录可以执行,到上一层就无法执行同程式 07/01 10:46