簡體   English   中英

不同子包的Python導入問題

[英]Python import issue for different subpackages

我正在嘗試實現以下層次結構。 我的最終目標是myscpt.sh應該從任何文件夾運行

但是我收到導入錯誤。

實現此類分層體系結構的最佳方法是什么?

FooSoft
|
|-- foo/
    |
    |-- test.py   
    |
    |-- common/     
    |
    |-- utils/
    |
    |-- api/
    |
    |-- scripts/
          |-- myscript.py
|
|-- bin/myscpt.sh
|
|-- etc/foo.conf

斌/ myscpt.sh

/usr/bin/python /path/FooSoft/foo/script/myscript.py /path/FooSoft/etc/foo.conf

富/腳本/ myscript.py

from ..common import *
from ..utils import *
from ..test import *
.
.
<Doing some stuff>

我在大多數模塊中使用.. import以避免絕對路徑。

通常,我總是通過將軟件包根目錄用作參考來解決導入錯誤。

首先,我將在項目根目錄中包含setup.py文件,並添加一個最小的setuptools包裝器

python setup.py develop

然后,您不必擔心從何處運行腳本。 您的導入內容如下:

from foo.common import *
from foo.utils import *
from foo.test import *

帶有類似from ..common import anything前導點的顯式相對導入只能從已作為包的子模塊導入的代碼(例如foo.scripts ,但不能從作為__main__腳本導入的代碼中使用,即使該腳本路徑包含.../foo/scripts/... 主腳本必須使用絕對導入,或者可以由python -c "from foo.scripts import myscript; myscript.run()"用作模塊。 (安裝foo或使用PYTHONPATH = / path / FooSoft)。 請參閱文檔中的“包裝內參考 ”或類似問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM