2014-01-08 57 views
1

我试图开发一个模拟类,在特定的应用程序(Win7,python 2.7)中替换serial导入文件名冲突

我有一个SerialHandle类,在应用数量的作品,它的工作是添加逻辑以众所周知的串行方法,当时的想法是与具有相同名称的虚拟文件来替换蟒蛇serial.py,所以我们不会有更改并输入SerialHandle

现在我有Serial类就像起源这个文件,它工作正常:

serial.py 
...Serial() 

因为我想真正模拟方法,我需要的SerialExceptionserialutil 所以我serial.py我里面“M尝试使用导入它:

from serial import SerialException

但作为预期我会得到这个加薪,因为from serial变为L在第一OCAL文件:

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 

我理解的问题是文件名,因为在任何其他文件,将工作...

我已经试过sys.append(site-packages....serial.py)没有运气。

问题:

  1. 任何方式告诉解释忽略在特定from..import本地文件?

  2. 是否有任何其他方式从绝对路径导入?

注:

  1. 文件命名为serial.py不是它的一个定义,以便更改名称是不相关的决定......

  2. 重载蟒蛇序列是不一个选项也...

+0

从python源代码复制SerialException并将其粘贴到模块中怎么办? – furins

+0

@furins它肯定会工作,我问这个问题的原因是因为我想知道是否有一些优雅的解决方案... –

+1

那么这种方法应该是你正在寻找的:http://stackoverflow.com/questions/6031584/python import-from-builtin-library-when-module-with-same-name-exists?rq = 1(批准的答案) – furins

回答

3

您必须使用python 2.x,因为绝对导入是python 3.x中的默认导入。

from __future__ import absolute_import 

请注意,您将需要任何隐含的相对进口的serial.py文件转换为:您可以通过在文件的顶部添加此使用您的serial.py文件绝对导入明确的相对进口。所以,如果你是从other_file.py,这是在同一个目录中导入some_func,你将需要更改到:

from .other_file import some_func 

注意“”表示与当前文件相同的包中的相对导入。有关更多详细信息,请参阅here

+0

不,他需要相反的结果。他需要始终隐式地从本地源加载,除了在他的模块内。 – furins

+0

这就是我的答案解释。导入'absolute_import'只会影响使用它的文件。其他人仍然会使用相对进口。 – bogatron

+0

是的,但在模块中,他不想访问本地文件,他想要python。 – furins