python3 的进口变化
change in import in python3
我正在使用 python 3.4.4 并通过创建示例包来测试 "init.py" 功能,但无法实施。上述案例在 python 2.7.13 版本的情况下运行良好。谁能告诉我我正在做的错误,或者 python 3.x 版本的语法是否有任何变化。请帮我学习一下Python3?
目录结构:
TestPackage/
__init__.py
TestModule.py
run.py
TestModule.py的内容:
def TestFun():
print("Welcome")
__init__.py的内容:
from TestModule import TestFun
run.py的内容:
from TestPackage import TestFun
TestFun()
当我执行run.py文件时,出现以下错误:
Traceback (most recent call last):
File "D:\CASE03\run01.py", line 1, in <module>
from TestPackage import TestFun
File "D:\CASE03\TestPackage\__init__.py", line 1, in <module>
from TestModule import TestFun
ImportError: No module named 'TestModule'
但是当我使用 python 2.7.13 时,它工作得很好。请指导我。
最简单的解决方案是将__init__.py
设置为空白文件。如果您有兴趣在执行 from Testmodule import *
时控制从模块导入的内容,您可以在 __init__.py
文件中包含 __all__ = ['TestFun']
。
在__init__.py
里面,如果你改变
from TestModule import TestFun
到
from .TestModule import TestFun
您将获得预期的行为。
参见:PEP 328(关于使用前导点的相对导入的部分)。
尝试将 __init__.py
更改为以下代码:
from TestPak.TestModule import TestFun
我正在使用 python 3.4.4 并通过创建示例包来测试 "init.py" 功能,但无法实施。上述案例在 python 2.7.13 版本的情况下运行良好。谁能告诉我我正在做的错误,或者 python 3.x 版本的语法是否有任何变化。请帮我学习一下Python3?
目录结构:
TestPackage/
__init__.py
TestModule.py
run.py
TestModule.py的内容:
def TestFun():
print("Welcome")
__init__.py的内容:
from TestModule import TestFun
run.py的内容:
from TestPackage import TestFun
TestFun()
当我执行run.py文件时,出现以下错误:
Traceback (most recent call last):
File "D:\CASE03\run01.py", line 1, in <module>
from TestPackage import TestFun
File "D:\CASE03\TestPackage\__init__.py", line 1, in <module>
from TestModule import TestFun
ImportError: No module named 'TestModule'
但是当我使用 python 2.7.13 时,它工作得很好。请指导我。
最简单的解决方案是将__init__.py
设置为空白文件。如果您有兴趣在执行 from Testmodule import *
时控制从模块导入的内容,您可以在 __init__.py
文件中包含 __all__ = ['TestFun']
。
在__init__.py
里面,如果你改变
from TestModule import TestFun
到
from .TestModule import TestFun
您将获得预期的行为。
参见:PEP 328(关于使用前导点的相对导入的部分)。
尝试将 __init__.py
更改为以下代码:
from TestPak.TestModule import TestFun