AWS

Let’s Encryptでvirtualenv: error: unrecognized arguments: –no-site-packages

Python2 系から Python3 系への移行が促されていますが、AmazonLinux を使っていると標準では 2.7 が使われます。

もちろん、Python3 系に入れ替えたり、virtualenv や pyenv などで複数の仮想環境を管理するのもいいですが、あまり意識しなくて済ませたいのが本音。

今回は、Let’s Encrypt を使っていて、いつの間にか certbot-auto renew のコマンドがエラーになっていたので対応してみました。

[追記]
後日、別のエラーも発生したので以下に対応の流れをまとめています。

Let’s Encryptでsubprocess.CalledProcessErrorAmazon Linux で yum を実行するたびにドキドキするのが Let’s Encrypt の状態。(特に python のパッ...

cryptography

certbot-auto renew の実行時に表示されていたエラーは以下の通り。

ImportError: No module named cryptography.hazmat.bindings.openssl.binding

最近、yum update をしたのが影響したのか、Python 関連のバージョン依存で生じたエラーでしょうか。

ただ、pip で cryptography をインストールしても、既にインストールされてるよって言われるだけで解決しないのですよね・・・。

これは、/usr/bin/pip ではなく /opt/eff.org/certbot/venv/bin/pip で実行しないといけないものなのか。それとも、ただ単にモジュールのバージョンによる影響なのか。

安易に Python を触ってると、この辺の構成がどうなっているのか理解ができてなくて悩ましいところです。

っと書きながら、一度 /opt/eff.org/certbot/venv 以下を削除したのですが、今度は以下のエラーが出る始末。

virtualenv: error: unrecognized arguments: –no-site-packages

まずはここの解決を目指します。

virtualenv

残念なことに、安易に /opt/eff.org/certbot/venv 配下を削除したことにより pip コマンドを打ってもエラーが出るようになってしまいました。

仕方がないので、virtualenv のセットアップを試みます。

ちなみに、yum でインストールされているのが python27-virtualenv でバージョンは 15.1.0。

パスが通っているのは /usr/local/bin/virtualenv でバージョンは 20.0.30。

こちらのバージョンが高すぎて依存関係が悪さしてそうなので、pip でバージョン指定してインストールし直します。

15.1.0 でもいいのですが、16 系にしておきますか。

これで、certbot-auto renew –debug のコマンドが実行され、/opt/eff.org/certbot/venv が再構築されました。

yum でインストールしているパッケージが必要ないんじゃないかと思いつつも、今アンインストールするのは止めておこうかな。

まとめ

中途半端に Python を利用すると同じ状況に陥ることが出てきそうなので、どこかで Python の構成について整理しておく必要がありそうですね。

また、AmazonLinux2 にすれば Python は 3 系、現在は 3.8 が主流になりつつあるので、積極的に 3 系を使っていきたいですね。