2014-10-09 4 views
4

특정 순서로 두 개의 라이브러리를 가져온 경우 파이썬이 종료되지 않습니다. 파이썬 라이브러리 scitoolsfenicstools을 사용하고 있습니다. 파이썬 쉘에서 파이썬 쉘이 출구에 붙어 있습니다.

이 다음이 작동합니다 : 두 우분투 14.04 시스템에

import scitools  # ok 
import fenicstools # ok 
exit()    # gets me stuck, I can still exit with Ctrl+C 

나는이 문제를 재현 할 수 있습니다 :이 종료하지만 끊지 않습니다

import fenicstools 
import scitools 
exit() 

(수입 반전) 그리고 지금은 완전히 손실되었습니다. 어떻게 이런 문제를 디버깅하기 시작합니까?

배경 : 나는 내 수치 시뮬레이션을 추적하기 위해 sumatra을 사용하고 있습니다. 그것은 수집하고 내 프로젝트의 종속성의 버전을 기록합니다. 따라서 그렇게하려고하는 순서에 대해서는 아무런 통제력이 없습니다. 결과 : 그것은 붙어 얻는다.

편집 : @ ErlVolton의 제안에 이어 pdb를 시도했습니다. 두 수입품을 문제가있는 순서로 test.py이라는 파일에 넣으십시오.

$ pdb test.py 
> /home/gallomania/test.py(1)<module>() 
-> import scitools 
(Pdb) n 
> /home/gallomania/test.py(2)<module>() 
-> import fenicstools 
(Pdb) n 
--Return-- 
> /home/gallomania/test.py(2)<module>()->None 
-> import fenicstools 
(Pdb) exit 

... 이렇게하면 pdb가 종료되지 않습니다. 각 작업 단계별 및 코드 fenicstools의 어떤 라인을 볼 수

+1

그냥 첫 번째 예제를 사용하여 이동? – csmckelvey

+2

@Takendarkk 왜 무언가가 일어나고 있는지 이해하고 싶다면 아무 문제가 없습니다. –

+0

저는 [수마트라] (http://neuralensemble.org/sumatra/)를 사용하여 수치 시뮬레이션을 추적하고 있습니다. 그것은 수집하고 내 프로젝트의 종속성의 버전을 기록합니다. 따라서 그렇게하려고하는 순서에 대해서는 아무런 통제력이 없습니다. 결과 : 그것은 붙어 얻는다. – gallomania

답변

0

사용 PDB는 __init__.py

https://docs.python.org/2/library/pdb.html

예에 걸려있다 :

$ pdb test.py 
> /home/cleekley/test/test.py(1)<module>() 
-> import sys 
(Pdb) s 
> /home/cleekley/test/test.py(2)<module>() 
-> import time 
(Pdb) s 
> /home/cleekley/test/test.py(4)<module>() 
-> while True: 
(Pdb) s 
> /home/cleekley/test/test.py(5)<module>() 
-> time.sleep(1) 
(Pdb) s 
> /home/cleekley/test/test.py(4)<module>() 
-> while True: 
(Pdb) quit 
+0

fenicstools를 잘 가져옵니다. 그것이 멈추는 출구입니다. – gallomania

+0

정말입니까? pdb는 무엇을 말합니까? 이러한 라이브러리 중 하나에 atexit 함수가있을 수 있습니다. virtualenv에서 시도해보고 내가 무엇을 얻을 수 있는지 알아 봅니다. – ErlVolton

+0

확실히, 저는 이것을 대화 형 셸에서 테스트하고 있습니다. 그래서 여러분의 제안에 따라 필자는'test.py'라는 파일에 두 가지 import를 넣고 pdb를 실행했습니다. 내 질문에 결과를 추가 할 것이다. – gallomania