システム開発・構築の神様

新しいサービスや技術を使った開発や構築。その他不具合解決など

古いAWSのEC2にLet's EncryptのSSL証明書をインストールするとpkg_resources.DistributionNotFound: The 'virtualenv==15.1.0'エラーが発生

ここ最近での流行と言えば、Let’s EncryptのSSL証明書でしょうか。

クラウドホスティングサーバーが出始めた頃は、セキュリティー的な問題を含めて中々浸透していなかったのですが、最近ではごく当たり前のようにクラウドが利用されるようになりました。

それと同じ現象が、SSLにもやってきている感じです。こちらは無償利用で、さらにメリットが高いです。

認知度も上がってきたので、クライアントさんに説明するのも楽になりましたね。

レンタルサーバーなどでは、標準で利用できるところが増えているので、今後はますます標準化されていくのだと思われます。

将来的に有償にならないことを願っています。。。

さて、そんな便利なLet’s EncryptのSSL証明書ですが、古いAWSサーバーに導入しようとした時に、いくつかのエラーに悩まされてしまいました。

Traceback (most recent call last):
File “/usr/local/bin/virtualenv”, line 6, in <module>
from pkg_resources import load_entry_point
File “/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py”, line 3049, in <module>
@_call_aside
File “/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py”, line 3033, in _call_aside
f(*args, **kwargs)
File “/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py”, line 3062, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File “/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py”, line 660, in _build_master
return cls._build_from_requirements(__requires__)
File “/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py”, line 673, in _build_from_requirements
dists = ws.resolve(reqs, Environment())
File “/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py”, line 858, in resolve
raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The ‘virtualenv==15.1.0’ distribution was not found and is required by the application

です。

AWSのPythonが2.6なので2.7に変更したのですが、上記エラーでLet’s Encryptが実行できません。

いろいろと試したところ、リンクを貼り直すことで修復できました。

rm /usr/local/bin/virtualenv
ln -s /usr/bin/virtualenv /usr/local/bin/virtualenv

ちなみに

古いvirtualenvは

#!/usr/bin/python2.7
# EASY-INSTALL-ENTRY-SCRIPT: ‘virtualenv==15.1.0′,’console_scripts’,’virtualenv’
__requires__ = ‘virtualenv==15.1.0’
import re
import sys
from pkg_resources import load_entry_point

if __name__ == ‘__main__’:
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$’, ”, sys.argv[0])
sys.exit(
load_entry_point(‘virtualenv==15.1.0’, ‘console_scripts’, ‘virtualenv’)()
)

新しいvirtualenvは

#!/usr/bin/python2.7

# -*- coding: utf-8 -*-
import re
import sys

from virtualenv import main

if __name__ == ‘__main__’:
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$’, ”, sys.argv[0])
sys.exit(main())
~

です。

Pythonにしろ、Node.jsにしろ、複数のバージョン対応の管理方法が訳が分からないですね・・・

難しい・・・

関連記事