2014-12-07 42 views
0

我有一個問題。我有這樣的目錄設置:Python從父級的子文件夾導入

folder/ 
     main.py 
     /stuff/ 
      __init__.py 
      function.py 
     /items/ 
      __init__.py 
      class.py 

我的問題是如何將class.py導入到function.py?此設置非常具體,無法更改。爲了實現這個目標,我需要做些什麼?

+0

將父文件夾添加到您的PYTHONPATH('sys.path.append(...)'),然後在'class.py'中簡單地執行'from stuff init function'。這是一個解決方案... – tamasgal 2014-12-07 16:13:03

+0

可能的重複http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python – kdopen 2014-12-07 16:20:26

+0

明確的重複http://stackoverflow.com/questions/27215912/import 27216343#27216343 – kdopen 2014-12-07 16:21:59

回答

0

只要應用程序通過main.py啓動,您的當前目錄結構似乎是理想的。

Python將始終自動將主腳本的父目錄添加到sys.path(即您的示例中的folder)的開頭。這意味着當搜索不屬於標準libarary的模塊和程序包時,導入機器將優先給予該目錄。

鑑於此,你可以導入classes.py模塊插入function.py,就像這樣:

from items import classes 

(請注意,我已經改名爲模塊,因爲class是一個Python關鍵字)。

如果以後添加了另一個模塊stuff,並希望將其導入到functions.py,你會怎麼做:

from stuff import another 

,如果子包加入items,和你想導入模塊從這一點,你會怎麼做:在這種自上而下的方式指定

from items.subpackage import module 

進口可以從在應用程序中的任何模塊一起使用,因爲他們總是RELAT主要腳本的父目錄,它具有優先權。

+0

謝謝。這工作 – Punisher 2014-12-08 14:09:25

+0

不適合我。請你解釋一下這是如何工作的,因爲我在每個文件夾中都有'__init __。py'文件的相同體系結構,但是當我嘗試導入它時不起作用。 – 2017-08-02 07:55:39

+0

@YohanObadia。我的答案並不多,這可以很好地解釋。您**必須**使用包含軟件包的目錄中的* main.py *腳本啓動應用程序。容器目錄本身不是一個包。這個問題非常清楚地顯示了正確的目錄結構。 – ekhumoro 2017-08-02 11:02:59