[英]Python ImportError / ModuleNotFoundError on own package in Eclipse PyDev
解決了,謝謝!
假設我有一個位於C:\\mymodules\\general
下的自寫模塊,其中包含文件foo.py
和__init__.py
。
現在,我想將位於foo.py
內的功能bar()
導入到腳本中一個完全不同的位置。
為什么這不起作用?
import sys
sys.path.append(r"C:\mymodules")
from general import foo
foo.bar()
我收到ImportError: cannot import name 'foo'
如果將C:\\mymodules\\general
到路徑,則相同。
另外,我也嘗試過
import sys
sys.path.append(r"C:\mymodules")
import general.foo
foo.bar()
在這里,我得到ModuleNotFoundError: No module named 'general.foo'; 'general' is not a package
ModuleNotFoundError: No module named 'general.foo'; 'general' is not a package
。
為什么一般不打包? 我以為要求是“包含__init__.py
”(當然還有我要導入的模塊)?
這就是所有Python3,在Windows7下的Eclipse中使用PyDev。
誰能告訴我什么地方出了問題以及怎么做呢?
編輯:該文件確實已經名為__init__.py
,所以這不是問題。
__init__.py
已經包含該行
__all__ = ["foo"]
編輯2:奇怪的是,以下作品:
import sys
sys.path.append(r"C:\mymodules")
from general import *
bar()
不過,我真的不想import *
。 當然必須有一種更清潔的方法嗎?
編輯3:當我從IDLE運行它時,它起作用了! (就是第一個代碼。)但是在Eclipse PyDev中,我仍然遇到相同的錯誤。 為什么?
啊! 找到解決方案! (請參見下面的答案以關閉此操作)。
如Robin Zigmond所說,在使用init
文件時,它必須帶有下划線。
__init__.py
如果這對您不起作用,則可以嘗試在init
文件中編寫
from foo import bar
要么
from foo.py import *
找到解決方案。 headdesk
在PyDev的Pythonpath(為整個工作區配置)中,我有另一個軟件包,其中包含一個名為general.py
的模塊 。 解釋器在到達我的package general
之前就找到了這個消息,因此message general is not a package
指向同名模塊的general is not a package
。
當我確實需要重用現有名稱時,這應該教會我使用單獨的工作區。 理想情況下,無論如何不要在不同的事物上使用相同的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.