かまたま日記3

プログラミングメイン、たまに日常

最近Pythonでハマったことメモ

2年前くらいに書いたAWS Lambda用のPythonスクリプトを修正することになったんですが、環境構築でひたすらハマったのでメモっておきます。

前提

  • 私はPythonまともに書くのは2年ぶりのPy弱です
  • 実行環境はMac
  • Pythonのバージョンは2.7

問題1: pip installが上手く行かない

何か pip install xxx でインストールしようとすると途中で permission denied エラーが出てインストールできません。 例えば pip install awscli するとこんな感じで /bin/aws に書き込みをしようとしてエラーになります

IOError: [Errno 1] Operation not permitted: '/bin/aws'

原因としては、いつ追加したか覚えてないんですが、setup.cfgというローカル固有の環境設定をするファイルが追加されてたようで(ref)、これに以下のように書かれてたのが原因でした.

[install]
prefix=

Prefix, 自分の環境で言うと /usr/local がこの設定により打ち消されていたようです、ファイルを消すことで解決。

問題2: Dockerのpythonのコンテナ上でライブラリが読み込めない

pip install xxx したあとにxxxを使うスクリプトpython foo.py で実行してもライブラリが読み込めませんでした。 公式の例に書かれてるように --no-cache-dir を付けることで解決。

pip install --no-cache-dir xxx

問題3: バージョン固定が上手く行かない

requirements.txt を使って使うライブラリを指定してたんですが、2年経ってバージョンが上がってたため、最新用に色々修正しました。その後今のバージョンに固定しておこうかと思ったので、こんな感じで書いたんですが、、

foo==1.2.3
bar==4.5.6

この書き方ローカル開発中のIntelliJで上はちゃんと動いてたんですが、CircleCIで使うDockerの python:2.7 イメージ上で pip install -r requirements.txt しても上手く必要なライブラリが全部インストールされませんでした。こちらのQiita記事を参考にして、バージョンは constraints.txt は記述し、 pip install -r requirements.txt -c constraints.txt とすることで解決。