簡體   English   中英

Eclipse PyDev中自己的軟件包上的Python ImportError / ModuleNotFoundError

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM