簡體   English   中英

Python奇怪的導入行為:導入xy工作,從x import y沒有

[英]Python strange import behavior: import x.y works, from x import y doesn't

我有一個簡單的目錄結構,像這樣:

MyProject
--main.py
--lib #that's a directory/package
----__init__.py
----view.py
----common_lib.py
----other irrelevant modules...

在main.py中:

from lib import view

導致以下錯誤:

ImportError: cannot import name view

如果相反,我寫它像:

from lib.view import *

此導入成功傳遞,但在view.py中發生下一次失敗,其中:

from common_lib import Comments, Locations, ScreenData, ProgressSignal

原因:

ImportError: No module named 'common_lib'

從目錄結構看,common_lib.py與view.py位於同一目錄中,怎么會發現它無法找到呢? 如何從'x import y'起作用,'from xy import *'有效嗎? ' __init__.py '完全是空的BTW。 我正在使用Python 3.3 32位。

更令人討厭的是,這個程序工作2天前。我正在測試IDLE中的一些代碼,當我認為代碼已准備好包含在項目中時,將其粘貼到PyDev中,我對此錯誤感到震驚。 我沒有改變我的目錄或模塊。

此外,更奇怪的是,運行view.py和common_lib.py作為獨立(沒有導入)運行就好了。 如果確實存在任何問題,它應該產生錯誤。

謝謝。 任何建議都非常感謝。

由於main.py仍處於頂層,因此您需要使用lib.common_lib

from lib.common_lib import Comments, Locations, ScreenData, ProgressSignal

因為from lib import view中的上一行沒有開始從lib內部查找模塊。

鑒於:

+--main.py     # from lib import view
+--lib
   +--__init__.py
   +--common_lib.py # Comments, etc.
   +--view.py       # from .common_lib import Comments, etc.

這有效:

from lib import view

這可以在view.py使用相對導入來指示common_lib在同一個包中。

from .common_lib import Comments, Locations, ScreenData, ProgressSignal

適合我:

danielallan@MacBook:~$mkdir myproject
danielallan@MacBook:~$cd myproject/
danielallan@MacBook:myproject$mkdir lib
danielallan@MacBook:myproject$cd lib
danielallan@MacBook:lib$touch __init__.py
danielallan@MacBook:lib$touch view.py
danielallan@MacBook:lib$touch common_lib.py
danielallan@MacBook:lib$cd ..

In [1]: from lib import view

In [2]: view
Out[2]: <module 'lib.view' from 'lib/view.pyc'>

在機器上嘗試時會發生什么? 您是否坐在錯誤的目錄中,或者您的路徑未配置為查找這些文件?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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