python:从模块导入abc.py不起作用

时间:2011-12-14 21:59:49

标签: module python-3.x importerror

我最近从python 2.7切换到python 3.2

考虑以下文件夹结构:

~/my_program
~/my_program/modules

其中* my_program *是应用程序的根目录,包含名为 main.py 的主脚本

  *my_program/modules* is used to store all additional classes and subscripts
在python2.x中的

我能够导入任何文件"模块"与导入标准模块的方式相同

from modules import abc.py 

然而,当我尝试在python3.2中启动相同的程序时,我收到错误消息:

File "/my_program/modules/__init__.py" line 1
import abc, def

ImportError: No module named abc

请告知

2 个答案:

答案 0 :(得分:3)

这是一个很好的例子,因为“abc”实际上是标准库中的一个模块。所以事实上,如果你在Python 3中做import abc可以正常工作,但你会得到标准的库模块。

在Python 2中,如果你有一个名为abc.py的本地模块,那么import abc将导入本地模块。这意味着您无法从标准库中导入模块。

在Python 3中,这已被更改,您现在需要使用完全限定名称,在您的情况下可能from modules import abc

答案 1 :(得分:0)

您在哪里存储您创建的模块?当我创建模块时,我会执行以下操作:

在python文件夹ex:myModules中的lib \ sitepackages文件夹中创建一个文件夹 在此文件夹中保存名为init.py的空白python文件。该文件不必包含任何语法。稍后,您可以根据需要在此文件中设置模块要求。 将模块保存到此文件夹ex:myGamesModule.py 在空闲(或您使用的任何python连接的IDE)中输入:

从myModules导入myGamesModule或从myModules导入myGamesModule作为myGmMod

那应该导入你的模块,然后你可以调用类等来自myGmMod.Player()

我确信这是正确的,因为我刚刚完成它并且没关系。

我发现有时候,如果我在模块文件夹中创建一个空白文本文件并将其重命名为 init .py,它之前就会给我带来麻烦。我通常只打开IDLE并将 init .py文件从那里保存到我的模块文件夹中,然后使用我使用的任何IDE(sublime)创建并保存其余文件。

另外,由于某些原因,文本框中不允许我在本文中使用的下划线,所以你看到init.py,它应该是( underscoreunderscore * init * underscoreunderscore < /strong> .py没有任何asterix