2016-03-28 124 views
4

我想在Python中創建一個包含多個需要互操作的子包(我不確定這是否合適)。在Python中創建一個包含多個子包的包

我有一個(簡單的)結構是這樣的:

/package 
    |-script1.py 
    |-script2.py 
    |-subpackage1 
    | |-__init__.py 
    | |-src 
    | | |-__init__.py 
    | | |-my_program.py 
    | | |-functions.py 
    | | |-... 
    | 
    |-tests 
    | |-a_tests.py 
    |-subpackage2 
    | |-web-server.py 
    | |-API 
    | | |-__init__.py 
    | | |-REST.py 
    | | |-... 
  • package/subpackage2需要能夠(使用pytests)來調用package/subpackage1/src/functions.py
  • package/tests電話都子包。
  • package/subpackage1/src/functions.py需要能夠內subpackage1

調用其它模塊我已經看到了這樣的回答:https://stackoverflow.com/a/33195094 - 這說明了什麼,我需要做的(創建包),但它並沒有解釋如何來做到這一點。

我可以很容易地得到兩個scripts稱他們的組件子包使用:

import subpackage1.src.my_program.py

(即類似建議here),但隨後my_program.py失敗,並ImportError: No module named 'functions'

所以,我需要用什麼膠水來設置這個結構?

+0

的'subpackage1'必須具有'__init __ py'是檢測爲模塊。你在'src'中加了'__init __。py',但沒有在'subpackage1'中。 –

+0

@GIRISHRAMNANI - 謝謝。我間歇地有一個在那裏,但不知道是否有必要。在那裏有一個似乎沒有改變任何東西;所以需要其他一些東西來...... –

回答

2

所以解決這個問題,我創建了一個類似的文件夾結構

/package 
    |-script1.py 
    |-subpackage1 
    | |-__init__.py 
    | |-src 
    | | |-__init__.py 
    | | |-functions.py 

我script1.py文件有

import subpackage1 
import subpackage1.src 
import subpackage1.src.functions as f 


print(f.hello()) 

functions.py文件有

def hello(): 
    return "from the functions" 
現在從 package

文件夾

我做

$ python script1.py

腳本運行和輸出

from the functions

顯示。

我使用python3

所以我失去了一些東西,因爲它在我的系統上工作。

注意:我添加了三個不同的imports來檢查那裏的導入錯誤。

3

如果你想從functions.py導入my_program.py然後在my_program.py你必須指定絕對導入路徑。

假設functions.py包含以下功能:

def function1(): 
    print('foo bar') 

然後,從functions.py導入function1my_program.py其內容應該是這樣的:

from subpackage1.src.functions import function1 

function1() 
1

my_program.py

添加import subpackage1.src.functions as f當你運行模塊時,站在package文件夾並運行如下:

python -m subpackage1.src.my_program