簡體   English   中英

使用 __init__.py 導入兄弟包不起作用

[英]Import Sibling Packages with __init__.py doesn't work

我正在嘗試處理一個結構如下的項目:

root_folder
├── __init__.py
├── a_folder
│   ├── __init__.py
│   └── script_1.py
├── b_folder
│   ├── __init__.py
│   └── script_2.py
└── script_3.py

我在 root_folder 上打開 IDE(VS Code)。 我將空的__init__.py文件添加到子文件夾和 root_folder。 我也保存所有並重新啟動IDE。

但是,當我嘗試在script_1中導入script_2 ,出現錯誤:

# in script_2.py

from a_folder import script_1

ModuleNotFoundError: No module named 'script_1'

我也嘗試了很多其他的方法,比如

# in script_2.py

from root_folder.a_folder import script_1

# Or

from .a_folder import script_1

但它們仍然不起作用。 我到處搜索,但仍然無法解決。 你介意給我一些提示嗎? 謝謝!

更新

以下是路徑的一些打印結果:

# when I try to run script_2 in b_folder

print(os.path.abspath(''))
print(os.getcwd())

---/home/nick/Desktop/root_folder
---/home/nick/Desktop/root_folder


print(sys.path)

---
['/home/nick/Desktop/root_folder/b_folder', '/home/nick/anaconda3/envs/pytorch101/lib/python37.zip', '/home/nick/anaconda3/envs/pytorch101/lib/python3.7', '/home/nick/anaconda3/envs/pytorch101/lib/python3.7/lib-dynload', '/home/nick/anaconda3/envs/pytorch101/lib/python3.7/site-packages']

在import語句前添加如下代碼

import sys
sys.path.append("./")

它將當前路徑添加到工作區,然后您可以成功導入模塊。

這是我的項目截圖,與你的文件夾結構相同。

在此處輸入圖片說明

[ 編輯 ]

我假設您的 cwd(當前工作目錄)在 root_folder 下,就像我的一樣。 那么 sys.path.append("./") 應該可以工作。

現在轉到 root_Project,在 launch.json 中添加以下代碼:

"env": {
    "PYTHONPATH": "${workspaceFolder}",
},
"cwd": "${workspaceFolder}"

Python擴展會在root_project下搜索模塊,可以直接導入模塊:

在此處輸入圖片說明

更詳細的信息請參考debugVariables 中的env

如果您仍在使用 Jetbrains Pycharm 等 IDE,請將您的文件夾“ root_folder ”設置為“源根目錄”。 如果您使用的是 VSC,您可以執行相同的操作。 另一種方式:

import sys
sys.path.append('your path')

可以手動將包添加到系統級別的ENV Path。

祝你好運。

暫無
暫無

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

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