iT邦幫忙

0

python3巢狀import問題

  • 分享至 

  • twitterImage

假設我有一個專案叫做bar,結構長這樣

bar
├── __init__.py
├── lib
│   ├── __init__.py
│   └── bar_lib_file.py
└── bar_file.py

bar_file.py裡面有一行import

from lib.bar_lib_file import funcion_in_bar_lib_file

現在我有個新專案想將這整個專案import進來,結構長這樣

foo
├── lib
│   └── bar
│       ├── __init__.py
│       ├── lib
│       │   ├── __init__.py
│       │   └── bar_lib_file.py
│       └── bar_file.py
└── foo_file.py

在foo_file.py裡試著import

from lib.bar.bar_file import funcion_in_bar_file

就會出現error

Traceback (most recent call last):
  File "foo_file.py", line 1, in <module>
    from lib.bar.bar_file import funcion_in_bar_file
  File "/home/llinyanbin/桌面/project/tmp/foo/lib/bar/bar_file.py", line 1, in <module>
    from lib.bar_lib_file import funcion_in_bar_lib_file
ModuleNotFoundError: No module named 'lib.bar_lib_file'

我知道可以去bar_file.py裡去修改成相對位置來解決

from .lib.bar_lib_file import funcion_in_bar_lib_file

但我想問有沒有辦法在不動到bar裡面的source code來解決,我不太確定是不是要編寫bar裡面的__init__.py

謝謝各位大大。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
rofellos
iT邦新手 2 級 ‧ 2021-06-09 16:38:26
最佳解答

試試foo_file.py加
sys.path.append(bar_file.py的絕對路徑)

或者你知道funcion_in_bar_lib_file的絕對路徑直接填進去

linyanbin iT邦新手 5 級 ‧ 2021-06-11 11:04:15 檢舉

我試了把這段寫在foo下面的__init__.py也可行

我要發表回答

立即登入回答