2014-01-08 2 views
1

특정 응용 프로그램 (Win7, python 2.7)에서 serial을 대체하는 시뮬레이션 클래스를 개발하려고합니다.파일 이름 충돌로 가져 오기

나는 애플 리케이션의 숫자에서 작동하는 SerialHandle 클래스를 가지고있다. 그것은 잘 알려진 시리얼 메소드에 로직을 추가하고, 아이디어는 파이썬 serial.py을 같은 이름의 더미 파일로 대체하는 것이었다. 변경 및 가져 오기는 SerialHandle입니다. 이제

난 그냥 기원 같은 Serial 클래스이 파일을 가지고 있고 그것을 잘 작동합니다 :

serial.py 
...Serial() 

난 정말 방법을 시뮬레이션하기 원하기 때문에 내가 SerialException serialutil에서 나의 serial.py 난 안에 필요

from serial import SerialException

을하지만 난이 인상을 얻을 것이다 예상대로 from serial는 리터로 이동 이후 : 노력하고있어 것은 사용하여 가져 처음 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

파이썬 소스 코드에서 SerialException을 복사하여 모듈에 붙여 넣는 것은 어떻습니까? – furins

+0

@furins 그것은 확실하게 작동 할 것입니다. 왜냐하면 제가 우아한 해결책이 있는지 궁금해서이 질문을 던졌기 때문입니다 ... –

+1

그러면이 접근법은 당신이 찾고있는 것이어야합니다 : http://stackoverflow.com/questions/6031584/python-importing-from-builtin-library-when-same-name-exists? rq = 1 (승인 된 응답) – furins

답변

3

절대 import가 파이썬 3.x에서 기본값이기 때문에 파이썬 2.x를 사용해야합니다. 당신이로 serial.py 파일에서 어떤 암시 상대적으로 수입을 변환해야합니다

from __future__ import absolute_import 

참고 :이 파일의 상단에이를 추가하여 serial.py 파일의 절대 수입을 사용할 수 있습니다 명백한 상대적인 수입. 같은 디렉토리에 other_file.py에서 some_func을 가져 있다면 그래서, 당신은에 그것을 변경해야 : 그

from .other_file import some_func 

참고 "." 현재 파일과 동일한 패키지에서 상대적인 가져 오기를 나타냅니다. 자세한 내용은 here을 참조하십시오.

+0

아니요, 그는 그 반대가 필요합니다. 그는 항상 모듈 내부를 제외한 로컬 소스에서 암시 적으로로드해야합니다. – furins

+0

그게 내 대답에 대한 설명입니다. 'absolute_import'를 임포트하는 것은 그것이 사용되는 파일에만 영향을줍니다. 다른 사람들은 여전히 ​​상대적 수입품을 사용할 것입니다. – bogatron

+0

네.하지만 모듈에서 그는 로컬 파일에 액세스하고 싶지 않습니다. 그는 파이썬을 원합니다. – furins

관련 문제