項目結構my_package├── my_package│? ?├── __init__.py│? ?└── my_module.py└── setup.py該模塊my_module.py有一個func我試圖導入的函數。該setup.py文件具有以下內容。from setuptools import setup, find_packagessetup(? ? name='my_package',? ? packages=find_packages(where='my_package'),? ? version='1.0')導入API我正在安裝該軟件包:virtualenv --python=/usr/bin/python3.8 venvsource venv/bin/activatepython my_package/setup.py install然后使用以下命令導入它:import my_packagefrom my_package import my_module但是,第二次導入失敗,并顯示:ImportError: cannot import name 'my_module' from 'my_package' (unknown location)此外,運行dir(my_package)顯示該my_module名稱確實沒有被導入。 ['__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
1 回答

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
您正在test.py
目錄的父目錄中運行腳本my_package
。因此,test.py
將嘗試將my_package
子目錄作為包/模塊導入,而不是您安裝的包。您將需要移動到不包含源代碼的目錄,然后運行測試。這可以像test
在my_package
主目錄的子目錄中運行它一樣簡單。
只需確保您cd
明確進入該目錄,而不是使用完整路徑運行它(例如,python3.8 my_package/test/test.py
,因為那樣它仍然會導入錯誤的my_package
.
其原因(也是問題的原因)是 Pythonsys.path
在開始時自動將當前工作目錄包含在 , 中,因此會嘗試將主my_package
目錄作為包導入。
添加回答
舉報
0/150
提交
取消