Оболочка 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