[英]Import from Another Directory is Failing in Python
我讀到要使用 python 文件作為導入模塊,我需要將__init__.py
放在目錄中。
我有以下目錄結構:
data_load
-- __init__.py
-- rand_data.py
etc
-- __init__.py
-- test.py
在 test.py 中,我導入了一個在 rand_data 中定義的 class ,我得到了錯誤:
python test.py
Traceback (most recent call last):
File "test.py", line 8, in <module>
from data_load.rand_data import RandData
ModuleNotFoundError: No module named 'data_load'
切換到 etc 和 data_load 的父目錄並輸入
python -m etc.test
這應該可以完成這項工作。
這里有一個小測試用例(假設你在 linux 機器上)
## create the test case
mkdir -p import_issue/data_load import_issue/etc
touch import_issue/data_load/__init__.py import_issue/etc/__init__.py
echo 'print("I am", __name__)' > import_issue/etc/test.py
echo 'from data_load.rand_data import RandData' >> import_issue/etc/test.py
echo 'print("Randdata = ", RandData)' >> import_issue/etc/test.py
echo "class RandData:" > import_issue/data_load/rand_data.py
echo ' pass' >> import_issue/data_load/rand_data.py
#
# now perform the test
cd import_issue
python -m etc.test
初始示例中的事情沒有按預期工作的原因是,您當前的工作目錄可能是etc
,如果您在 etc 中加載 python 腳本,那么它會嘗試導入相對於當前工作目錄的 load_data( etc
)在etc
下面沒有名為rand_data
的目錄,其中有一個文件__init__.py
。
我建議修復 go 到公共父目錄(這現在將是您當前的工作目錄)並將 etc/test 作為模塊導入。 原因是, test.py 位於帶有init .py 的目錄 etc 中,因此您應該將其作為 etc.test 導入,而不是直接調用它。 不建議直接使用 etc/test.py 調用文件,即模塊,並且會引起一些罕見的混亂情況。
而不是在etc
目錄中運行命令python test.py
在etc
和data_load
的父目錄中運行 python 腳本。
即您需要在終端中做的是(考慮到您仍在終端的etc
目錄中)
1. `cd ..`
2. `python etc/test.py`
這會奏效。
你為什么會遇到錯誤是因為在test.py
python 正在當前目錄中查找data_load
模塊,並且由於etc
目錄中沒有 data_load 模塊,因此會出現此錯誤。
如何解決上述問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.