🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2290閲覧

The Python ssl extension was not compiled. Missing the OpenSSL lib?

omixin

総合スコア58

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/12/18 03:05

編集2019/12/18 08:23

macOS Sierraにて、pyenv, virtualenvを使ってpythonのバージョン管理を始めたところです。

$ pyenv install 3.1.4

などとして、別バージョンのPythonを新たにインストールしようとするのですが、表題のエラーが出ます。

エラーメッセージにはここを参照するようにも書かれており、こちらのリンク先で表題の文言で検索すると解決策らしき箇所へヒットします。
https://github.com/pyenv/pyenv/wiki/Common-build-problems

また、その解決策らしきもので解決できたという記事もありました。
https://qiita.com/ayihis@github/items/25e752dc5201835bb966

ただ、この内容が何をやっているのか理解できていないので、理解できていないまま進めるのもよろしくないだろうと思い、質問させていただく次第です。

$ CFLAGS="-I$(brew --prefix openssl)/include" LDFLAGS="-L$(brew --prefix openssl)/lib" pyenv install -v 3.1.4

こちらのコマンドが実行している内容についてご教授お願いできないでしょうか。
環境変数をセットしているような気もするのですが、恒久的に書き換えているのか、それともこのコマンドに限り有効な設定としているのか、そのあたりも含めていただけると幸いです。
よろしくお願いします。

追記.
上記のコマンドを打ったところ、エラーが解決しませんでした。
こちらのエントリーには上記のエラーを解決したくて訪問する方がいると思われるので、解決方法もまとめておきたいです。
こちらのエラーの解決についてわかる方がいらっしゃれば教えていただけないでしょうか。

補足:
調べていると、比較的多くの方がこちらを参考にされているように感じたので、こちらのスレッドについてもリンクを共有します。(私は全ては読むことができていません)
https://github.com/pyenv/pyenv/issues/1066#issuecomment-387211005

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こちらのコマンドが実行している内容についてご教授お願いできないでしょうか。

CPython が OpenSSL のライブラリを使用しているので、CPython をビルドする場合は参照する必要があるのですが、それに失敗したので、OpenSSL がパソコンにインストールされていないのではないかというのが表題のエラーメッセージです。
(※ Python にインタプリタ CPython は C 言語で書かれています)

ライブラリの参照に失敗する場合の原因として、次の2つの原因が考えられます。

  • そのライブラリが PC にインストールされていない
  • そのライブラリは PC にインストールされているが、パスなどが通ってないため、コンパイラが見つけられなかった

今回、その変数を設定してコンパイラが通ったということは後者のケースに該当すると思います。

brew --prefix openssl で OpenSSL がインストールされているディレクリのパスが取得できるので、その include パスとライブラリのパスをそれぞれ

CFLAGS="-I$(brew --prefix openssl)/include"
LDFLAGS="-L$(brew --prefix openssl)/lib"

で変数に設定しています。この名前の変数が Python をビルドするときに参照されます。

このように定義した変数はこのコマンドに限り有効な設定となります。

投稿2019/12/18 07:57

編集2019/12/18 08:04
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

omixin

2019/12/18 08:20

丁寧にご回答ありがとうございました! よく理解できました。助かります。 ※自分用の補足 [$ brew --prefix xxx] コマンドにて、インストール済みの xxx のインストール先を取得できます。今回はこちらを利用しています。 参考:https://qiita.com/usamik26/items/601f5612bd3f8a21cc41 こちらの回答をベストアンサーとさせていただきたいのですが、当初の目論見が外れ、まだ表題のエラーが解決できていないため、解決できるまでオープンにしておきたいです。。 申し訳ありませんがもうしばらくお待ちください。
tiitoi

2019/12/18 08:23 編集

brew --prefix openssl でパスは表示されましたか? おそらく Mac には最初から入っているのではないかと思いますが、一応確認してみてください もしインストールされていないのだとしたら、インストールが必要です
omixin

2019/12/18 08:28

アドバイスありがとうございます! 記載漏れました。 自分の現在の状況で [$ brew --prefix openssl] とすると、次のように返ってきます 返り値:[/usr/local/opt/openssl@1.1] (こちらを参考に設定後となります https://qiita.com/smith-30/items/a275f30b040c1ea74520) 補足の補足: また、 [$ brew list] コマンドにて brew でインストールしたソフトの一覧が表示され、 [$ brew list xxx]コマンドにてインストールしたソフトの詳細が確認できるようです。
omixin

2019/12/18 08:51

残念ですが、共有いただいた記事も試してダメでした。。
tiitoi

2019/12/18 08:52 編集

openssl@1.1 ということはバージョン1.1 ですね。 公式ドキュメントを見ると OpenSSL 1.1 がサポートされたのが Python 3.5.3 で、今ビルドしようとしているバージョンが 3.1.4 なので、3.1.4 の CPython が要求する openssl のバージョンとあっていなくてエラーになっているのだと思います。 https://docs.python.org/ja/3/library/ssl.html > バージョン 3.5.3 で変更: Updated to support linking with OpenSSL 1.1.0 openssl をダウングレードすればできるのかもしれませんが、他のプログラムでも使われてるので、バージョンを下げるのはあまりよくないかもしれません。 3.1.4 を使いたい特別な理由がないのであれば、3.5.3 以降を使ったほうがいいと思います。
omixin

2019/12/18 09:16

CPython が要求する openssl のバージョンとあっていなくてエラーになっているのは盲点でした。 また、機械学習用途で使いたいライブラリがPython2系を要求しているので、2.7.10以降のバージョンについてインストールする方法を模索します。。 また、opensslのバージョンについては今日色々調べていく中で変更したかたちになります。 変更前に [$ openssl version]コマンドで確認したところ、 [OpenSSL 0.9.8zh 14 Jan 2016] と返ってきていました。 Python2系でもopensslの要求バージョンとあったいないかを調べたいと思います。
tiitoi

2019/12/18 09:24

2系は 2.7.13 以降であれば、1.1.0 に対応しているみたいですよ。 pyenv では 2.7.17 とかインストールできます。 https://docs.python.org/ja/2.7/library/ssl.html > バージョン 2.7.13 で変更: Updated to support linking with OpenSSL 1.1.0 Python2と3は同時並行で開発されていたので、時期的には 3.1 より 2.7 のほうが新しいのだと思います。
omixin

2019/12/18 09:27

こちらでも試してみたところうまくいきました! ありがとうございました! ーー 3.1.4 / 2.7.10 / 2.7.12 について [$ pyenv install X.X.X] を試したところ、同様のエラーが出ていたが 2.7.15 についてインストールを試みたところエラーなくインストールでき、[$ pyenv versions] でインストールしたPythonのバージョンを確認できた。
guest

0

わかったこと

・環境変数 [CFLAGS / LDFLAGS] を設定しつつ pyenv install コマンドを打っているということ
・この設定はこのコマンドのみで有効であるということ
・今回使用している macOS Sierra バージョン 10.12.6 では上記のコマンドではインストール成功しなかった
・「$ openssl version」コマンドでopensslのバージョンを確認したところ、「OpenSSL 0.9.8zh 14 Jan 2016」と返ってきた
・こちらのエントリを参考に下記コマンドを打ったが、失敗
http://gansonewyamamen.hatenablog.com/entry/2018/09/11/151855

$ brew install 'openssl@1.1' $ CONFIGURE_OPTS="--with-openssl=$(brew --prefix openssl)" pyenv install 3.7.0

・ちなみに、brew で導入したopenssl@1.1のPATHはこちらの記事を参考に設定もしており、「which」コマンドでも確認済みです
https://qiita.com/smith-30/items/a275f30b040c1ea74520

・こちらを参考にxcodeコマンドラインツールを導入してもダメ(導入済みとなりました)
http://o-tomox.hatenablog.com/entry/2014/09/22/174315

・こちらを参考に「$ brew install pyenv readline xz」としてもダメ
https://ja.stackoverflow.com/questions/41007/pyenv%E3%81%A7python3%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B

以上
いまだ模索中です

投稿2019/12/18 07:13

編集2019/12/18 07:46
omixin

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

omixin

2019/12/18 09:31

tiitoiさんのコメントを参考に、解決できました。(コマンドの処理内容についても理解が深まりました) 結局、インストールのPythonのバージョンとOpenSSLソフトの相性が良くなく、Python2.7.15をインストールしたところエラーなくインストールできた。 恐らくOpenSSLの脆弱性に関わるところだろうと思われる。 参考:https://eset-info.canon-its.jp/malware_info/qa/detail/141204_1.html tiitoiさんに感謝です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問