Python3 Docker環境構築+実行時エラーの解決方法
Pythonの環境構築を行なっていた時に、沢山のエラーが発生したので、解決方法をご紹介します。
ShibaEmonでは様々な言語を用いて制作をスタートするので、元のPC環境を綺麗な状態に保っておきたいため、Dockerを使用しています。
Dockerは、昨今のチーム開発の現場や個人開発のフルスタックエンジニアまで必要な知識になっています。
そのため今回もPythonの環境構築をする際は、Dockerで行いました。
開発環境
MacBook Pro Mojave
Visual Studio Code
Docker
Python3
多くの環境構築記事に掲載されている内容ですが、初めてPythonを取り扱う際には、未設定のものが沢山残っています。
そこで、エラーが多発してしまいます。
順を追って解説していきますので、まずは以下のファイルを作成し記述しましょう。
Dockerでビルドするところまで作成してみよう
Dockerfileというファイルを作成して以下を記述
FROM python:3
USER root
RUN apt-get update
RUN apt-get -y install locales && \\
localedef -f UTF-8 -i ja\_JP ja\_JP.UTF-8
ENV LANG ja\_JP.UTF-8
ENV LANGUAGE ja\_JP:ja\_JP
ENV LC\_ALL ja\_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN apt-get install -y vim less
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
docker-compose.ymlというファイルを作成して以下を記述
version: '3'
services:
python3:
restart: always
build: .
container\_name: 'python3'
working\_dir: '/root/'
tty: true
volumes:
- ./opt:/root/opt
コンテナイメージのビルドと起動するため、ターミナルにて以下を実行
$ docker-compose up -d --build
コンテナに接続するためにターミナルにて以下を実行
$ docker-compose exec python3 bash
ここまでで環境構築が完了します。
テストしてみる
このPythonの環境構築は多くの記事で紹介されていますが、エラーがあったことを書いてしまうと、人によって環境が違うのでシンプルでは無くなってしまいます。
なので、エラーが書かれていなかったりして、そこで挫折してしまう方が多くいらっしゃるとお聞きします。
ここからは実際に発生したエラーを解決しながら、正しく環境構築ができたところまでの一部始終を解説していきます。
参考にした記事はTech Academyです。
参考記事: https://techacademy.jp/magazine/47408 (opens in a new tab)
有用記事ありがとうございます。
optフォルダが生成されているので、rand_array.pyファイルを作成し以下を記述
import numpy as np
import pandas as pd
rand\_array = np.random.rand(3, 3)
df = pd.DataFrame(data=rand\_array, columns=\['a', 'b', 'c'\])
print(df)
コンテナの内部に入るため、ターミナルにて以下を実行
docker-compose exec python3 bash
ターミナルでoptディレクトリに移動して以下を実行
cd opt
python rand\_array.py
正しく実行されれば以下のような乱数が返ってくる
a b c
0 0.359246 0.823608 0.764952
1 0.067105 0.253759 0.994724
2 0.914478 0.980217 0.983367
しかし、こんな値も表示されずにエラーになってしまった方もいらっしゃるでしょう。
そのために、ShibaEmonの記事に訪れたのではないでしょうか。
ということで、エラーの原因を追求して解決していきます!
一つずつエラーを消していきましょう。
Linter pylint is not installed.
Visual Studio CodeでLinter pylint is not installed.というエラーメッセージが表示されていませんか?
installして解決できると思い、実行してみますが『There is no Pip installer available in the selected environment.』とエラーが発生します。
これは、Visual Studio Code自体がPython環境を適切に選択できていないことから発生するエラーになっています。
なので、Visual Studio CodeでCommand+Shift+Pキーを押してコマンドパレットを表示します。
select interpreterなどと入力すると、使用できるPythonのパスが表示されるため選択します。
これで通常でしたら、再びエラーに表示されているinstallを実行すると正常に行われます。
しかしながら、私の環境の場合はエラーが静まってくれませんでした。
原因はVS Code自体がMac OSに保存されているpylintの参照先が違っていたからでした。
VS CodeでCommand+Shift+pのコマンドを入力し、入力欄にpreferencesを入力します。
すると、『preferences Open Settings (UI)』と表示されるので選択。
これでVS Codeの環境設定画面を表示できます。
Search settingsの入力欄にpylintを入力し検索。
以下の項目を見つけることができます。
`Python › Linting: Pylint PathPath to Pylint, you can use a custom version of pylint by modifying this setting to include the full path.`
デフォルトパスはPylintになっているので、ターミナルでwhich pythonと実行して出力されたパスをコピペして変更します。
私の場合のフルパスはこちら。
`/usr/local/bin/pylint`
そしてVS Codeを再起動。
無事pylintに関するエラーが表示されなくなりました。
ちなみにpylintはPythonの記述ルールを定めてくれる優秀なソースコード、バグ、および品質チェッカーです。
参考記事: https://www.atmarkit.co.jp/ait/articles/1711/24/news034.html (opens in a new tab)
https://higelog.brassworks.jp/2625 (opens in a new tab)
有用記事ありがとうございます。
ModuleNotFoundError: No module named 'numpy'
これはpipがインストールできていないために発生するエラーです。
一度テストファイルrand_array.pyに記述した『import numpy as np』をコメントアウトして、他を実行した際に以下が表示されました。
No module named 'pandas'
モジュールのpandasが無いと言われています。
ターミナルにて以下のコマンドを実行しインストールします。
pip install pandas-datareader
pipコマンドを実行できるようにするために以下をターミナルで実行します。
$ export PATH="$HOME/Library/Python/2.7/bin:$PATH"
永続的にパスを通すよう .bash_profile に記述。
$ echo 'export PATH="$HOME/Library/Python/2.7/bin:$PATH"' >> ~/.bash\_profile
実はこのエラーを解決するとpipのインストールが完了するため、ModuleNotFoundError: No module named 'numpy'のエラーを一緒に解決することができました。
これらのエラーを解決することで、正常なファイル実行が行えます。
The macOS system install of Python is not recommended, some functionality in the extension will be limited. Install another version of Python for the best experience.
MacOSにデフォルトでインストールされているPythonが非推奨という表示がVS Codeに出ました。
参考記事: https://qiita.com/andromeda/items/2e5a89a89cecb11b29f2 (opens in a new tab)
有用記事ありがとうございます。
もし、エラーで正常に動作せずに困っていたという方のヒントになれば幸いです。