2017-07-06 2 views
0

Je travaille avec tqdm package qui présente la barre de progression en python. Tqdm a également un widget pour les ordinateurs portables Jupyter (tqdm_notebook()), permettant une jolie barre de progression "web-ish".variations tqdm dans différents environnements python

Mon problème que j'ai une barre de progression tqdm dans un fichier code.py, que j'importe dans le cahier jupyter.

Pendant l'exécution du code.py de eviroment python régulier (c.-à-Ipython, IDLE, shell) Je veux tqdm à courir sous forme normale:

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

mais quand je l'importation code.py dans Jupyter, je veux utiliser tqdm_notebook() :

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

Comment puis-je faire python distinguer entre les environnements?

Je trouve this post qui suggèrent de vérifier get_ipython().__class__.__name__ ou 'ipykernel' in sys.modules mais il ne fait pas de distinction entre l'ordinateur portable et d'autres coquilles ipython (comme en Spyder ou IDLE).

Répondre

0

Apparemment, en utilisant sys.argv peut aider ici.

import sys 
print sys.argv 

L'exécution de ce code dans Jupyter aura cette arguments:

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

Alors bien sûr en cours d'exécution de shell/IDLE aura pas la ligne jupyter.

Par conséquent, la déclaration d'importation code.py devrait être:

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