[爆卦]python import上層目錄是什麼?優點缺點精華區懶人包

為什麼這篇python import上層目錄鄉民發文收入到精華區:因為在python import上層目錄這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者cccx (ccc)看板Python標題Re: [問題] import 上層資料夾的module...


借用一下這個標題

我把原作者的架構延伸成下圖
(綠色代表可執行)

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
cccx:如果只有Amazon資料夾以外的程式要使用API的話 03/05 17:42
cccx:寫 from .. import xxx 就夠了 03/05 17:43
cccx:但如果自己或main.py要使用API 就要加sys和except那段 03/05 17:44
※ 編輯: cccx 來自: 114.25.181.65 (03/05 17:47)
grtfor:推一下這篇,另外ValueError是不是應該改成ImportError ? 06/29 11:06
grtfor:我發現增加sys.path的方式,是以執行位置來開始算.. 07/01 10:46
grtfor:也就是會造成在該目錄可以執行,到上一層就無法執行同程式 07/01 10:46

你可能也想看看

搜尋相關網站