我最近从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
请告知
答案 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)中输入:
那应该导入你的模块,然后你可以调用类等来自myGmMod.Player()
我确信这是正确的,因为我刚刚完成它并且没关系。
我发现有时候,如果我在模块文件夹中创建一个空白文本文件并将其重命名为 init .py,它之前就会给我带来麻烦。我通常只打开IDLE并将 init .py文件从那里保存到我的模块文件夹中,然后使用我使用的任何IDE(sublime)创建并保存其余文件。
另外,由于某些原因,文本框中不允许我在本文中使用的下划线,所以你看到init.py,它应该是( underscoreunderscore * init * underscoreunderscore < /strong> .py没有任何asterix