2013-11-29 35 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