ModuleNotFoundError: Python 3.6 does not find modules while Python 3.5 does

ModuleNotFoundError: Python 3.6 does not find modules while Python 3.5 does

我想将我的 python 版本从 3.5 升级到 3.6。由于我使用的是 WinPython,因此我已经下载并安装了最新版本,就像我之前使用 3.5 版一样。

但是,如果我使用 3.6 版,每当我导入一个自创建的模块时,我都会得到一个 ModuleNotFoundError。一个最小的例子:我创建了一个文件 t1.py,它只包含一个 pass 语句和一个文件 t2.py,其中包含以下代码:

import t1
print("done")

两个文件都在同一个文件夹中D:\MyProject\src。现在,当我 运行 带有 python 3.5 的文件时,一切正常:

'C:\Program Files\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\python.exe' D:\MyProject\src\t2.py
done

然而,python 3.6 我得到

'C:\Program Files\WinPython-64bit-3.6.0.1Qt5\python-3.6.0.amd64\python.exe' D:\MyProject\src\t2.py
Traceback (most recent call last):
  File "D:\MyProject\src\t2.py", line 6, in <module>
    import t1
ModuleNotFoundError: No module named 't1'

我 运行 不知道问题可能是什么,希望得到新的启发。

这行得通吗?在 t2.py

import os
__path__=[os.path.dirname(os.path.abspath(__file__))]
from . import t1
print("t2 done")

Python-3.6 改变了它的工作方式,"python._pth" 文件在 python.exe 旁边(而不是以前版本中的 "pyvenv.cfg")

如果您不想修改源代码,则必须在 Python._pth 文件中添加 "D:\MyProject\src" 行,或者从 python._pth 位置添加相对路径。在我的示例中,它适用于:

python36.zip
DLLs
Lib
.
..\test
import site

"http://bugs.python.org/issue29578?@ok_message=msg%20287921%20created%0Aissue%2029578%20message_count%2C%20messages%20edited%20ok&@template=item"

其他更简单的解决方案,如果您没有 system-installed python:将 "python._pth" 文件重命名为 "python.exe" 旁边的 "pythonzz._pth"

Python "Windows" 维护者刚刚写道,更简单的解决方案也适用于 Python-3.6.0.