2013-11-29 36 views
1

使用Windows 7和Python 2.7。我在c:\Python27\Lib\site-packages\regetron有一個名爲Regetron的軟件包,其中包含__init__.pyengine.py。當我嘗試通過鍵入regetron運行在命令提示符下這個庫,我得到以下錯誤:腳本目錄中的ImportError

Traceback (most recent call last): 
    File "C:\Python27\Scripts\regetron.py", line 6, in <module> 
     from regetron.engine import Regetron 
    File "C:\Python27\Scripts\regetron.py", line 6, in <module> 
     from regetron.engine import Regetron 
ImportError: No module named engine 

我加c:\Python27\Lib\site-packages\regetron到%PYTHONPATH%,並能成功地導入從位於其他文件夾中的其他腳本,以及此模塊交互式提示符,但由於某種原因它拒絕從命令提示符運行。到底是怎麼回事?

回答

0

這裏你確實有兩個問題。修復其中一個實際上可以消除你的直接錯誤,但你需要修復它們。

When I try to run this library from the command prompt by typing regetron

你不應該有一個腳本命名爲regetron,也有一個名爲regetron模塊或組件。通過重命名您的腳本來修復它。但是,如果您想了解爲什麼它會導致問題:

當前工作目錄始終是sys.path的一部分。所以,你在regetron.py的目錄裏,你用regetron來運行它。這意味着regetron.py在路上。所以當你import regetron,它找到你的腳本,而不是包。或者,當您找到您的腳本時,它會嘗試從其中導入變量/函數/類/無論名稱爲engine,而不是找到該包並嘗試在其下導入一個模塊。


I added c:\Python27\Lib\site-packages\regetron to %PYTHONPATH%

絕不添加一個包的目錄sys.path

由於站點包已經在你的sys.path,在regetron/engine.py代碼已經可以作爲regetron.engine。你不想要它可作爲engine。這會造成各種問題。


所以,重命名你的腳本到別的東西,從%PYTHONPATH%刪除regetron,一切都會好起來的。

但您可能需要(重新)閱讀教程中Packages的部分。

+0

謝謝你的回覆。重命名腳本並從%PYTHONPATH%刪除regetron後,我仍然得到:'ImportError:無法導入名稱regetron'。這是一個新問題還是我沒有解決舊問題? – ubeatlenine

+0

@ubeatlenine:聽起來你沒有解決舊的問題。兩種可能性:(1)你是否啓動了一個新的'cmd.exe',並確認'%PYTHONPATH%'爲空? (2)工作目錄中是否還有'regetron.pyc'或'.pyo'文件?如果是這樣,你必須刪除它。 – abarnert