LoginSignup
2
2

More than 1 year has passed since last update.

データ構造化 100本ノックしようと環境構築したらapt-getで苦しんだ

Last updated at Posted at 2021-11-21

背景

データを扱うにあたってpythonでより早く処理できるようになりたいと思い、何かいい教材はないかと探していたところ、こんなレポジトリを見つけた。
The-Japan-DataScientist-Society/100knocks-preprocess

データサイエンティスト協会が作成したレポジトリになり、pythonm R, SQLでデータの加工と分析する問題を100問集めたものになります。

「これこそ求めてたものじゃん」と喜々として取り組むも、利用にあたり、Dockerなどの環境構築が必要だと知りました。
実際に公式ドキュメントを参考にインストールを進めてみるもエラーに散々苦しめられました。類似のエラーを探してググるも、クリティカルなものはあまりなかったため、今後100本ノックに挑戦しようと思う人たちに向けて、私なりに記事を残してみた。

前提

・windows10 pro,WSL2(Ubuntu-20.04),Doker Desktop環境で使用しています。

本題

apt-get系のコマンドエラー

公式ドキュメントに従い、前もってDoker Desktopをインストールし、git configではgit config -global core.autocrlf inputと指定する(falseでも可)。
そしてgitでクローンし、そのままdocker-compose up -dをすると下記のエラーで詰まってしまった。

Status: The command '/bin/bash -o pipefail -c apt-get update     && apt-get -y install apt-transport-https     && apt-get -y install apt-utils wget unzip vim less     && apt-get install -y --no-install-recommends lsb-release=11.1.0ubuntu2 gnupg=2.2.19-3ubuntu2.1     && sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'     && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -     && apt-get update     && apt-get install -y --no-install-recommends libpq-dev=14.0-1.pgdg20.04+1     && apt-get remove -y lsb-release gnupg     && apt-get autoremove -y     && rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100, Code: 100

エラー文の内容が理解できず、色々調べて1日経ったところであるissueを見つけた。
ERROR: Service 'notebook' failed to build : Build failed

エラーの症状は完全一致ではないものの、エラー文がapt-getで始まっている点や、returned a non-zero code: 100, Code: 100部分は共通している。
リンク内で提示されているリンクを確認してみると、
https://pkgs.org/download/libpq-dev
Libpq-devのダウロードページが表示され、そこではそれぞれのOSに対応したlibpq-devのバージョン一覧が記載されていた。

私が使用しているのはUbunts-20.04なので、確認してみると、libpq-dev_14.1-1.pgdg20.04+1_amd64.debが最新だった。
そのため、ものは試しにnotebook配下のDockerfileファイルの

Dockerfile
&& apt-get install -y --no-install-recommends libpq-dev=14.0-1.pgdg20.04+1 \

部分を以下のように書き換えてみる。

Dockerfile
    && apt-get install -y --no-install-recommends libpq-dev=14.1-1.pgdg20.04+1 \

すると上記のエラーは解決した。
libpq-devは、PerlでDBIからPostgreSQLサーバーへ接続するためのDBD::Pgをインストールするために必要になるコマンドで、
libpgの後にバージョンを指定しているのだが、PostgreSQLのバージョンが11月11日にバージョンアップし14.1がリリースされ、古いバージョンになってしまったので原因のように思える。
そのため100本ノック構築をする際はPostgreSQLのバージョンを確認して、適宜書き換える必要があるかもしれない。

hostが見つからない

postgressのバージョンを更新し、docker-compose up -d --buildすると表示のエラーは解消された。
ただ、エラーは解消されてはまた現れる。

postgreSQLサーバーは元々構築してないので、preprocess_knock_Python.ipynbに直接、こんな形で書き換えて、
カーネルを実行してみると今度はこんなエラーが表示された。

preprocess_knock_Python.ipynb

pgconfig = {
    'host': 'db',
    'port': '5432',
    'database': 'dsdojo_db',
    'user': 'postgres',
    'password': 'postgres12345',
    }

# pd.read_sql用のコネクタ
conn = psycopg2.connect(**pgconfig)


OperationalError: could not translate host name "db" to address: Unknown host

今度はこんなエラーが出てきた。
要するにdbというホストを見つけられないと言っている。
色々、試行錯誤したがhost部分をlocalhostとする事で解決した。
ちなみにyml側の`DATABASE_HOSTを`dbを変更しても解消されなかった。
一体なぜなんだ…

preprocess_knock_Python.py
pgconfig = {
    'host': 'localhost',
    'port': '5432',
    'database': 'dsdojo_db',
    'user': 'postgres',
    'password': 'postgres12345',
    }

感想

正直、データサイエンスの領域でdockerを学ぶ事になるとは思っていなかったです。
概要は何となく掴みましたが、動きやコマンド操作はいまだによくわからない部分が多々あります。

原因を探るにあたって公式のisuueを先に見た方がエラー解消がより早く進むかもしれません。
PythonだけならCSVをダウンロードしてローカルでロードする方向もありますが、それでは疑問は残るし、SQLで取り組めなくなる。そして何よりも気持ちよくない。

とりあえず、100本ノックを始められる状態になったので、本来の目的に戻ってコツコツ解いてみたいと思います。

参考

Windows ユーザー向けのgit利用時の注意
ERROR: Service 'notebook' failed to build : Build failed
【Python】os.environ で KeyErrorが発生 #
libpq-devのインストール - PostgreSQLクライアントのヘッダとライブラリ
apt-get - パッケージの操作・管理 - Linuxコマンド
The psycopg2 module content

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2