我正在尝试开发一个模拟类,用于替换特定应用程序中的serial
(Win7,python 2.7)。
我有一个适用于多个应用程序的SerialHandle
类,它的工作是为众所周知的串行方法添加逻辑,其目的是用一个同名的虚拟文件替换python serial.py
所以我们不必在SerialHandle
更改和导入。
现在我的文件与Serial
类一样,就像原点一样,它运行正常:
serial.py
...Serial()
因为我想真正模拟我需要来自SerialException
的{{1}}的方法
所以在我的serial.py中我试图使用以下方法导入它:
serialutil
但正如预期的那样,我会在from serial import SerialException
首先转到本地文件后获得此加注:
from serial
我理解问题是文件名,因为在任何其他文件中它都可以工作......
我试过Traceback (most recent call last):
File "C:/CROW/ATE/DUTDrivers/DD_SimulatorExample/DD_SimulatorExample.py", line 18, in <module>
from Utilities.Serial.SerialHandle.trunk.SerialHandle import SerialHandle
File "C:\CROW\ATE\Utilities\Serial\SerialHandle\trunk\__init__.py", line 4, in <module>
from Utilities.Simulator import serial
File "C:\CROW\ATE\Utilities\Simulator\serial.py", line 11, in <module>
from serial import SerialException
ImportError: cannot import name SerialException
没有运气。
问题:
是否可以告诉解释器忽略特定from..import的本地文件?
是否有其他方法可以从绝对路径导入?
注意:
文件命名为sys.append(site-packages....serial.py)
不是决定它是一个定义所以更改名称是不相关的......
重载python serial也不是一个选项......
答案 0 :(得分:3)
你必须使用python 2.x,因为绝对导入是python 3.x中的默认导入。您可以在 serial.py 文件中使用绝对导入,方法是在文件顶部添加:
from __future__ import absolute_import
请注意,您需要将 serial.py 文件中的任何隐式相对导入转换为显式相对导入。因此,如果您要从同一目录中的some_func
导入other_file.py
,则需要将其更改为:
from .other_file import some_func
请注意“。”表示从与当前文件相同的包中的相对导入。有关其他详细信息,请参阅here。