[英]ModuleNotFoundError: No module named 'package' on ubuntu
我有一個 python 項目,其結構如下:
package/
__init__.py
conf/
my_conf.py
__init__.py
lib/
tasks/
somecode.py
__init__.py
在somecode.py
我從 conf 導入,例如:
from package.conf.my_conf import somevar
當我嘗試使用以下命令在命令行中執行代碼時:
python3 package/lib/tasks/somecode.py
我收到以下錯誤:
ModuleNotFoundError: No module named 'package'
這發生在 Ubuntu 18 上,真的很奇怪,因為我在我的 Mac 上運行完全相同的命令並且沒有問題。 值得一提的是,我的 Mac 上有 Ubuntu 上的 python 3.6 和 3.7。 這有什么區別嗎?
我一直在閱讀關於 SO 的帖子以及相對進口已經消失的事實,但我認為這不是我的問題,因為否則它將無法在我的 Mac 上運行。 但是,我試了一下並將我的代碼更新為:
from ...conf.my_conf import somevar
我現在收到一個新錯誤:
ValueError: attempted relative import beyond top-level package
我還將 Ubuntu 上的PYTHONPATH
設置為:
/usr/local/lib/python3.6/dist-packages/:/home/myusername/package/
這也沒有幫助。 這已經成為一個麻煩,我一直無法找到一個很好的資源來解釋這一切。 因此,非常感謝任何幫助。
更新:我忘了提到我from package.conf.my_conf import somevar
在 python3 本身中運行,沒有任何問題。
這是我解決問題的方法,我將其發布在這里以防萬一它可能對其他人有所幫助。 如問題中所述,我意識到運行以下代碼沒有問題:
python
from package.conf.my_conf import somevar
所以我認為我的終端和 python 命令行之間一定有什么不同。 所以我在兩種情況下都比較了PYTHONPATH
:
echo $PYTHONPATH
在我的終端打印:
/home/myusername
以下來自 python:
import sys
print(sys.path)
打印:
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/myusername/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
所以我更新了終端中的PYTHONPATH
使用:
export PYTHONPATH=export PYTHONPATH=/home/myusername:/usr/lib/python36.zip:/usr/lib/python3.6:/usr/lib/python3.6/lib-dynload:/home/myusername/.local/lib/python3.6/site-packages:/usr/local/lib/python3.6/dist-packages:/usr/lib/python3/dist-packages
這解決了這個問題。 所以總的來說,我采取了以下步驟:
__init__.py
存在於所有子目錄中PYTHONPATH
設置正確嘗試將您的導入更改為
from .package.conf.my_conf import somevar
注意“包”之前的點(。)。 它告訴 python 查看當前目錄,而不是去搜索 python 庫目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.