2011-09-15 95 views
2

有沒有什麼辦法在Python中創建虛擬導入路徑?Python:創建虛擬導入路徑

我的目錄結構是這樣的:

  • /
    • 本地
      • 腳本
        • some.py
        • another.py
      • [其它無關顯示目錄]

根是從被執行的程序,其中的目錄。 ATM我添加native/scripts/到搜索路徑所以我可以做import some, another代替from native.scripts import some, another,但我希望能夠做到這樣的:

from native import some 
import native.another 

有什麼辦法來實現這一目標?


相關問題:
Making a virtual package available via sys.modules

回答

2

爲什麼不動some.pyanother.py伸到native DIRECTO以便一切正常工作,以便稍後返回源代碼的人員不會爲什麼事物是可導入的而不會被混淆? :)

更新:

感謝您的意見;他們已經有用地澄清了問題!在你的情況下,我通常把我可能想要導入的函數和類放在裏面,比如native.some,我可以很容易的找到它們。但後來我得到的腳本代碼,並只有腳本代碼 - 只有薄墊片,它解釋參數,並開始一切通過傳遞那些爲main()go()功能參數運行 - 並把一個scripts目錄內。這將外部接口代碼與您可能想要導入的代碼完全分離,並且意味着您不必嘗試將Python一次性僞裝成具有多個模塊的模塊。

+0

爲什麼不把所有的文件都放在根目錄下,並完成它。 ;) –

+0

我將文件保留在根目錄之外,以避免與標準庫和第三方模塊的名稱衝突,我可能需要從PyPI獲得 - 我只能在頂層取得一個名稱,而不是幾個名稱。這就是爲什麼。 :) –

+0

我正在寫的是一個嵌入Python的應用程序,而不是用Python編寫的。在我的具體情況下,如果我可以通過'native'包引用本機腳本,而不會污染目錄本身,情況會更好。 –

3

/native/__init__.py,包括:

from scripts import some, another 
+4

請注意,如果他在'scripts'本身中還有一個'__init __。py',它纔會有效。 (也許這對他來說很明顯?)另外,這意味着腳本不是按需導入的,但是在'native'本身被導入的那一刻就會被導入;但在大多數情況下並不重要。 –

+0

這是一個解決方案,但後來我不能'import native.some' —我也希望能夠做到這一點。 –

+2

@Paul爲什麼不把'some.py'和'other.py'移動到'native /'然後呢?看起來這就是你真正想要的。 – phihag