Оболочка Python застрял на выходе

Python не завершается, если я импортировал две библиотеки в определенном порядке. Я использую библиотеки Python scitools и fenicstools.

В оболочке python будет работать следующее:

import fenicstools
import scitools
exit()

Это не будет выход, но зависнет (обратный импорт):

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

Я могу воспроизвести это на двух машинах Ubuntu 14.04, и теперь я в полной растерянности. Как мне вообще начать отлаживать такую ​​проблему?

Справочная информация: я использую Суматру, чтобы отслеживать мои численные моделирования. Он собирает и регистрирует версии зависимостей моего проекта. Таким образом, я не контролирую порядок, в котором он пытается это сделать. Результат: застревает.

Изменить: Следуя предложению @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 не выходить.

1 ответ

Используйте pdb для пошагового выполнения каждой операции и посмотрите, какая строка кода висит в ее fenicstools. __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
Другие вопросы по тегам