![](/img/trans.png)
[英]Python import statement doesn't work depending on position in __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下搜索模塊,可以直接導入模塊:
更詳細的信息請參考debug和Variables 中的env 。
如果您仍在使用 Jetbrains Pycharm 等 IDE,請將您的文件夾“ root_folder
”設置為“源根目錄”。 如果您使用的是 VSC,您可以執行相同的操作。 另一種方式:
import sys
sys.path.append('your path')
可以手動將包添加到系統級別的ENV Path。
祝你好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.