bookmark_borderpandasをimportすると「Could not import the lzma module」とエラーが出た時の対処(MacBook M1)

CSV操作のためpandasをインストールしインポートするが、「Could not import the lzma module」とエラーが発生し実行できない。

無事調べてみた情報で解決できたので、手順を残しておきます。

参考にしたのはこちらのサイト様たち。

[Python3 / pandas] pandasをアップデートしたら、lzmaなるmoduleがimportできないというメッセージが出た

ModuleNotFoundError: No module named ’_lzma’ #27532

手順

lzmaの有効化

まずはエラー文にもあるlzmaをインストール。

brew install xz

.zprofileを編集。

vi ~/.zprofile 

.zprofileに以下を追記。

prefix=$(brew --prefix)
export LDFLAGS="-L$prefix/opt/xz/lib $LDFLAGS"
export CPPFLAGS="-I$prefix/opt/xz/include $CPPFLAGS"
export PKG_CONFIG_PATH="$prefix/opt/xz/lib/pkgconfig:$PKG_CONFIG_PATH"
# YOU CANNOT HAVE THE GNUBINS in your PATH when you run this
export PYTHON_CONFIGURE_OPTS="--enable-shared"

追記した環境変数を有効化。

source ~/.zprofile

Pythonの再インストール

再インストールの前に、インストール済みのライブラリを確認。
(Pythonを再インストールすると、インストールしていたライブラリが消えてしまったので)

pip list

現在使用しているPythonのバージョンを確認。

python --version

pyenvを使って確認したバージョンをアンインストール。
(私の場合3.9.6を使用していました)

pyenv uninstall 3.9.6

この段階でPythonのバージョンを確認すると2.7.16となっており、

pyenvを使って、先ほどアンインストールしたPythonのバージョンをインストール。

pyenv install 3.9.6

pyenvを使って、インストールしたPythonのバージョンに切り替える。

pyenv global 3.9.6

.zprofile、.zshrcの内容を反映させる。

source ~/.zproflie
source ~/.zshrc

再度Pythonのバージョンを確認し、インストールした。

ライブラリのインストール

pip list

でインストール済みのライブラリを確認しつつ、Pythonをアンインストールする前にインストールされていたライブラリの状態に戻す。

pandasをインストールする。

pip install pandas

以上の手順で、pandasをimportしたpythonファイルを実行できるはず。

bookmark_borderPythonの対話モード開始と終了

対話モードとはインタプリタ上でプログラムを入力、実行できるモード。

対話モードの開始は、コンソール(またはターミナル)上で

python

と入力。

>>>

と表示され、入力待ち状態になる。
ここでプログラムを入力するとそのまま実行出来る。

対話モードの終了は、

exit()

と入力するか、「Ctrl+D」で終了できる。

よく間違えて対話モードにしちゃうけど、終了方法なんだっけ?ってなることがあるからメモ。

bookmark_borderPythonコードチェックツール

Pythonのソースコードを自動チェックしてくれるツールはないかと探すといくつか出てきたけれど、今回はflake8というチェックツールを使用してみたのでそれについてまとめる。

今回主に参考にしたサイトはこちら。

Pythonのスタイルガイドとそれを守るための各種Lint・解析ツール5種まとめ!

pythonでコーディング規約(pep8)に準拠しているかチェック方法

flake8とは、ソースコードがPythonのコード規約(PEP8)に則っているか、論理的エラーがないか、また循環複雑度を確認するツール。

pycodestyleというコード規約チェックツールと、pyflakesという論理的エラーチェックツールの機能に+αで循環複雑度チェックの機能が入っているらしい。

※pep8というツールが新しくなったものがpycodestyleらしい。(pep8自体は今も使える)

pip install flake8

でインストールして使用可能となり、

flake8 main.py

で実行可能。
(main.pyの部分には確認したいソースファイルを入れる)

実行してみるとこんな感じでエラーが出てきました。

エラー出すぎ!!

「E」や「W」から始まるエラーコードはコード規約エラーまたは警告、「F」から始まるエラーコードは論理的エラーの検知、「C」から始まるエラーコードは循環複雑度の検知らしい。

flake8 ./

のようにディレクトリを指定してやると、ディレクトリ内の.pyファイルをすべてチェックしてくれるみたい。
便利!!

その他にも

flake8 main.py --show-source

のようにオプションをつけて送ると、ソースコードの指摘箇所も表示してくれるようになるみたい。

ちなみにオプション一覧は

flake8 --help

で確認可能。

autopep8というツールを使うと自動でコード修正までしてくれるみたいだけど、最初はエラーを確認しながら自分で修正していきたいのでとりあえずは使いませんでした。
(手間に感じてきたら使うかも)

bookmark_borderPythonで月名を表示

昔Qiitaに書いていた記事をそのままこっちにも記載。

転載元:https://qiita.com/Rxxx/items/382854052b14c1764b5b

 

初めてPythonを触ったので練習として
「入力した数値に該当する数値の月名(英語3字)で表記する」
というものを作成。

 

以下、作成したコード。

#月名タプル
MONTH = ( 'Jan', 'Feb', 'Mar', 'Apr',
           'May', 'Jun', 'Jul', 'Aug',
           'Sep', 'Oct', 'Nov', 'Dec' )

#入力    
print('数値に該当する月の英語名を表記します')
num = int(input('数字を入力してください:'))

#出力判定
if 1 <= num <= 12:
    print(MONTH[num-1])   #月名出力
else:
    print("その月はありません")  #エラー

 

実行するとこんな感じ。
(入力値:2)

数値に該当する月の英語名を表記します
数字を入力してください:2
Feb

 

1~12以外の数値を入力するとこう表示される。
(入力値:14)

数値に該当する月の英語名を表記します
数字を入力してください:14
その月はありません

 

入力を数字のみに制限するのは今後の課題かな。