不同python环境中的tqdm变化

时间:2017-07-06 15:14:11

标签: python ipython jupyter-notebook spyder tqdm

我正在使用tqdm包在python中显示进度条。

tqdm还有一个Jupyter笔记本小部件(tqdm_notebook())的小部件,允许一个漂亮的" web-ish"进度条。

我的问题是我在code.py文件中有一个tqdm进度条,我将其导入到jupyter笔记本中。

从常规python eviroment(即code.pyIpythonIDLE)运行shell时,我希望tqdm以正常形式运行:

from tqdm import tqdm
a = 0
for i in tqdm(range(2000)):
   a+=i

但是当我将code.py导入Jupyter时,我希望它使用tqdm_notebook()

from tqdm import tqdm_notebook as tqdm
a = 0
for i in tqdm(range(2000)):
   a+=i

如何让python区分环境?

我发现this post建议检查get_ipython().__class__.__name__'ipykernel' in sys.modules  但它并没有区分笔记本和其他Ipython shell(例如Spyder或IDLE)。

2 个答案:

答案 0 :(得分:1)

func nextIteration() { print ("dialogSemaphore = \(dialogSemaphore)") switch (dialogSemaphore){ case 3: DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) { self.nextIteration() }// wait 1 sec break case 4: dialogSemaphore = 5 DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) { self.nextIteration() }// wait 1 sec break case 5: performSegue(withIdentifier: "SegueToViewHistory", sender: nil) dialogSemaphore = 3 // back to neutral break default: print ("wtf \(dialogSemaphore)") break } } 现在具有一个tqdm模块。来自doc

通过使用autonotebook子模块,可以让tqdm在控制台版本或笔记本版本之间自动选择:

autonotebook

请注意,如果在笔记本中运行,这将发出from tqdm.autonotebook import tqdm tqdm.pandas() ,因为这不可能区分jupyter笔记本和jupyter控制台。 使用自动而不是自动笔记本来禁止显示此警告。

答案 1 :(得分:0)

显然,使用sys.argv可以在这里提供帮助。

import sys
print sys.argv

Jupyter中运行此代码将具有以下参数:

['C:\\Users\\...\\lib\\site-packages\\ipykernel\\__main__.py',
 '-f',
 'C:\\Users\\...\\jupyter\\runtime\\kernel-###.json']

当然从shell / IDLE运行时不会有jupyter行。

因此code.py中的import语句应为:

if any('jupyter' in arg for arg in sys.argv):
    from tqdm import tqdm_notebook as tqdm
else:
   from tqdm import tqdm