从文件执行时解决ModuleNotFoundError

时间:2019-05-12 21:05:20

标签: python

我已经使用pip3安装了pyserial模块。导入该模块并在IDLE shell中逐行执行(复制和粘贴)程序效果很好,但是运行文件(带有IDLE)会导致ModuleNotFoundError。

我的python版本在MacOS 10.14.5上为3.7.3

我比较了sys.version,sys.path和sys.executable。 sys.version是

"3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21) \n[Clang 6.0 (clang-600.0.57)]"

sys.executable是

/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7

sys.path是

['', '/Users/edidos/Documents', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages']

从文件运行时,除了sys.path [0]引用文件位置之外,没有其他差异。

import sys

print(sys.path)
print()
print(sys.version)
print()
print(sys.executable)

import serial.tools.list_ports
ports = serial.tools.list_ports.comports()

for port, desc, hwid in sorted(ports):
        print("{}: {} [{}]".format(port, desc, hwid))

这是确切的错误:

Traceback (most recent call last):
  File "/Users/edidos/Projecte/PythonRPLidar/serial.py", line 9, in <module>
    import serial.tools.list_ports
  File "/Users/edidos/Projecte/PythonRPLidar/serial.py", line 9, in <module>
    import serial.tools.list_ports
ModuleNotFoundError: No module named 'serial.tools'; 'serial' is not a package

1 个答案:

答案 0 :(得分:0)

我知道了。 原来我将文件命名为serial.py,这会干扰导入序列(duh)

有时候忍不住成为白痴。