【Python3】progressbarとtqdmがImportErrorになったのでsys.pathで導いてあげた
python3で画像収集するスクリプトを作ったわけですけど
GIFをダウンロードしてみたらちょっと時間がかかったんですよ。
何枚もあったからだとは思うんですけど、それだと動いてるのか止まってるのかわからないんですよね。
なのでよくapt-get installとかバッチファイルとかで見かけるダウンロードバーと言いますか、進捗状況を表示させたくなりまして。
いろいろ探してみました。
やっぱり一回ではうまくいかなかったのでハマったところを吐き出しておきます。
あ、前回の記事はこちら
ダウンロードバーを表示するモジュール
2種類あったので両方試してみました。
▼progressbar
pip install progressbar2
progressbarは無印と2があるようでpython3系はprogressbar2を使うようです。
デフォルトだと#で進捗状況が表示されます。
参考サイト
▼progressbar2 3.34.2 : Python Package Index
▼【Python】 progressbar - keisukeのブログ
▼tqdm
pip install tqdm
tqdmの場合はシンプルに棒で表示されます。
調べてみたところtqdmを使ってる人のほうが多い印象です。
参考サイト
▼tqdm 4.15.0 : Python Package Index
▼Pythonで進捗バーを表示する(tqdm) - naritoブログ
詳しく知りたい人は英語ですが公式サイトを見たほうがいいです。
ざっと使い方を知りたい人は2番目のブログをご覧ください。
僕は上記ブログを参考にさせていただきました。
Module not found 現る
基本的には両方ともimportで呼び出すことができます。
しかし僕の場合両方ともimporterrorと表示されて使えなかったのです。
んなに?!
インストールはちゃんとできてるんでなにかと思いましたが、どうやらpython2.7ってフォルダに入っていたようです。
/usr/local/lib/にpython2.7とpython3.4のフォルダがあったのでpython3.4に移そうと試みたんですが移動できないようです。
なんでかよくわからないのでとりあえずsys.pathでモジュールのパスを指定することにしました。
sys.path.append
パスの指定は簡単です。
import sys sys.path.append('/usr/local/lib/python2.7/dist-packages')
こんなようにモジュールがインストールされているディレクトリを書くだけでOKです。
このコードはimport tqdmやimport progressbarより前に書いてくださいね。
ちなみにsysってのがなんなのか調べてみたところ
インタプリタで使用・管理している変数や、インタプリタの動作に深く関連する関数を定義しています。
だそうです。
ま僕には何を言ってるのかまったく理解できないんですけどね。
python公式をぜひご覧ください。
29.1. sys — システムパラメータと関数 — Python 3.6.1 ドキュメント
コード
tqdmとproguressbarを動かすのに試しに書いたコードです。
# os.path & progressbar test.py # coding:utf-8 import sys sys.path.append('/usr/local/lib/python2.7/dist-packages') from tqdm import tqdm import progressbar import time p = progressbar.ProgressBar() print('progressbar') for i in p(range(100)): time.sleep(0.02) print('tqdm') for i in tqdm(range(100)): time.sleep(0.02)
昨日のコードにtqdmを付け加えるとこうなります。
# -*- coding:utf-8 -*- import sys sys.path.append('/usr/local/lib/python2.7/dist-packages') from tqdm import tqdm import progressbar import time import requests from bs4 import BeautifulSoup URL = 'http://nogiviola.livedoor.biz/archives/2786524.html' images = [] soup = BeautifulSoup(requests.get(URL,headers={'User-Agent': 'Mozzila/5.0'}).content,'lxml') for link in soup.find_all("img"): if link.get("src").endswith(".jpg"): images.append(link.get("src")) print('ダウンロード中...') for target in tqdm(images): resp = requests.get(target) with open('img/' + target.split('/')[-1], 'wb') as f: f.write(resp.content)
まとめ
昨日の記事で書いたコードはコメントが多すぎて見づらいですね。
あとシンタックスハイライトも見づらいかもしれない。
自分で変えておきながら言うのもなんですが。
あとでデフォルトに戻そうかな。
ああと話変わるんですけど、ミチョのパイナップル味が出たんですよ!!
最近コストコ行ってないのであるかわからないんですけど、買ったらまたレビューしますね!
酢、飲んだほうがいいよ。
一応ミチョの記事を貼っておくね。