実現したいこと
wgetモジュールを使用して、webサイト上からLZH形式のファイルをダウンロード・解凍して保存したい。
前提
以下のサイトを参考にボートレース情報が格納されているファイルを取得しようとして、jupiternotebookで動作を確認したところ、以下のようなエラーが出ました。
https://qiita.com/Norimax/items/c500d1bf78e823e07f2b
エラー発生元は「import wget」
MacOS 13.2.1
Python 3.9.13
発生している問題・エラーメッセージ
ModuleNotFoundError: No module named 'wget'
該当のソースコード
python
1 2import pandas as pd 3import os 4import urllib.request 5import subprocess 6import wget 7 8def download_file(obj, date): 9 10 date = str(pd.to_datetime(date).date()) 11 ymd = date.replace('-', '') 12 S, s = ('K', 'k') if obj == 'result' else ('B', 'b') 13 if os.path.exists(f'downloads/{obj}/{ymd}.txt'): 14 return 15 else: 16 os.makedirs(f'downloads/{obj}', exist_ok=True) 17 try: 18 url_t = f'http://www1.mbrace.or.jp/od2/{S}/' 19 url_b = f'{ymd[:-2]}/{s}{ymd[2:]}.lzh' 20 wget.download(url_t + url_b, f'downloads/{obj}/{ymd}.lzh') 21 archive = LhaFile(f'downloads/{obj}/{ymd}.lzh') 22 d = archive.read(archive.infolist()[0].filename) 23 open(f'downloads/{obj}/{ymd}.txt', 'wb').write(d) 24 subprocess.run(['rm', f'downloads/{obj}/{ymd}.lzh']) 25 except urllib.request.HTTPerror: 26 print(f'There are no data for {date}')
試したこと
wgetの使い方を調べ、pip install wgetでインストールしてimport wgetと記載したのですが、うまく動作せず悩んでおります。
以上、よろしくお願いいたします。
お使いの OS と、python のインストール方法などを書きましょう。
追記いたしました。
他に不足情報あればコメントいただけると幸いです。
「ModuleNotFoundError: No module named 'wget'」の発生元は「import wget」で良いでしょうか?
はい、発生元は「import wget」です。
pip install wget
を実行したのと同じ状態で
pip show wget
を実行してください
いろいろ表示される中に「Location:」で始まる行があるので、そこに書かれてるパスを記録してください
次に、pythonで
import wget
がうまくいかない状態で、下記のpythonコードを実行してください
import sys
import pprint
pprint.pprint(sys.path)
たくさんパスが表示されますが、その中にpip show...で記録したパスが入ってますでしょうか?
入ってないとインポートできません
pythonで
import wget
がうまくいかない状態で、下記のpythonコードを実行して、使ってるpythonの絶対パスを調べてください
import sys
print(sys.executable)
上記で調べた絶対パスが、たとえば
/aaa/bbb/python
だとしたら、ターミナルで(pythonが起動してない状態で)下記を実行したら、インポートできるようになると思います
(実行する際は、調べた実際のpythonの絶対パスに置き換えてください)
/aaa/bbb/python -m pip install wget
pip show wgetで表示された「Location:」で始まる行のパスは、
import sys
import pprint
pprint.pprint(sys.path)
で表示されるパスに含まれていなかったため、pythonの絶対パスを確認して
絶対パス -m pip install wget
を実行しましたが、以下の表示が出てしまいました。
zsh: no such file or directory
> zsh: no such file or directory
ターミナルで下記を実行したら、どうなりますでしょうか?
ls -l 調べたpythonの絶対パス
ls: pythonの絶対パス: No such file or directory
と表示されます。
調べたpythonの絶対パスが、たとえば
/aaa/bbb/ccc/ddd/python
だとします
下記のように、パスの最初から一つずつ増やして「ls -ld...」を実行してみてください
ls -ld /
ls -ld /aaa
ls -ld /aaa/bbb
ls -ld /aaa/bbb/ccc
ls -ld /aaa/bbb/ccc/ddd
ls -ld /aaa/bbb/ccc/ddd/python
そうしたら、最初のうちはうまくいくけど、どこかで
> ls: パス: No such file or directory
となると思いますので、そうなった時にパスに追加した部分に何か特徴がありませんでしょうか?
たとえば、
ls -ld /aaa/bbb
は大丈夫だけど、
ls -ld /aaa/bbb/ccc
はダメなら、「ccc」の部分に何かあるはずです
(特殊な文字が含まれてるとか)
パスが /home/pyodide/this.program でして、
ls -ld /home は問題なさそうなのですが、
ls -ld /home/pyodide で ls: /home/pyodide: No such file or directory と表示されます。
ls -l /home
を実行したら、「/home」に有るファイルやディレクトリの一覧が表示されますが、その中に「pyodide」は有りますでしょうか?
大文字と小文字の違いも区別されるので、ご注意ください
lrwxr-xr-x 1 root wheel 25 2 22 20:40 /home -> /System/Volumes/Data/home
と表示され、「pyodide」はないようです。
ls -l /System/Volumes/Data/home
では、どうでしょうか?
total 0
と表示されます。
そうなら、
「/home/pyodide」
というパスが存在しないので、当然
「/home/pyodide/this.program」
というパスも存在しないので、
> ls: パス: No such file or directory
となります
pythonで
import sys
print(sys.executable)
を実行して表示されたパスが存在しないはずはないのですが、変ですね
【追記】
> パスが /home/pyodide/this.program
「pyodide」って、もしかしてこれでしょうか?
https://snova301.hatenablog.com/entry/2022/03/22/153638
もしそうなら、普通のpythonのようにpipでインストールすることはできないので、上記webページの
「Pyodideでサポートされているライブラリを使いたい時」
と
「サポート外のライブラリを使いたい時」
を見てください
ただし、
https://zenn.dev/ymd_h/articles/7275cc8dca30e1
を見ると、インストールできるものは限られてるようなので、「pyodide」に「wget」がインストールできるかは分かりません
【追記2】
あるいは、もし「jupyterlite」
https://medium.com/pydata-osaka/jupyterlite-jupyter-%EF%B8%8Fwebassembly-%EF%B8%8Fpython%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A8%B3-1f228a9d97d1
を使ってるなら、
https://teratail.com/questions/bfyuxfw5u7kfu5
の「質問へのコメント」の私の二つ目のコメントを見てください
ただし、「jupyterlite」の裏では「pyodide」が動いてるので、インストールできるものは限られてるのは「pyodide」と同様だと思います
はい、同一のmacです。
jupiternotebookで実行しているのは特に問題ないでしょうか?
私の一つ前のコメントの【追記】と【追記2】を見てください
「jupyterlite」を使っているのが原因のようでした。
ターミナルからjupyternotebookを開いて試したところ、正常に動きました。
ありがとうございました!

あなたの回答
tips
プレビュー