2014-10-09 2 views
4

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

В питона оболочки, следующие будут работать:

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 машин и теперь я полностью потеряю. Как я могу начать отлаживать такую ​​проблему?

Справочная информация: Я использую 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 не выходом.

+1

Просто используйте первый пример и двигаться дальше? – csmckelvey

+2

@Takendarkk нет ничего плохого в том, чтобы понять, почему что-то происходит. –

+0

Я использую [суматра] (http://neuralensemble.org/sumatra/), чтобы отслеживать численное моделирование. Он собирает и регистрирует версии зависимостей моего проекта. Таким образом, я не могу контролировать порядок, в котором он пытается это сделать. Результат: он застревает. – gallomania

ответ

0

Используйте 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 
+0

Он импортирует fenicstools просто отлично. Это выход, на котором он висит. – gallomania

+0

Вы уверены? Что говорит pdb? В одной из этих библиотек может быть функция atexit. Я попробую в virtualenv и посмотрю, что я могу найти с – ErlVolton

+0

Абсолютно уверен, я тестирую это в интерактивной оболочке. Итак, следуя вашим предложениям, я поместил два импорта в файл, который я назвал 'test.py', и запустил pdb. Я добавлю результаты к моему вопросу. – gallomania

Смежные вопросы