Python 3.7で、機械学習のライブラリTensorFlowを使ってみようとしてハマる

機械学習やってみたいと思ったことありませんか?ワシもじゃ ワシもじゃみんな!!

Javaで使える機械学習ライブラリMahout( Apache Mahout )というものがあることを、職場の方に教えていただきました。

Mahout(ヒンディー語由来の「象使い」という意味で「マハウト」と読むそうです)というそうです。

 

ですが、今回は、Pythonで利用できる機械学習ライブラリ、TensorFlow を試していきたいと思います。

WindowsPython環境構築につきましては、 

ts0818.hatenablog.com

⇧  手前味噌になりますが、この回の記事を参考にしていただければ、構築できるかと。tensorflowもインストールしてます。

※ Anacoda などは使わずにPython環境を構築しています。

 

Minikube内蔵のDockerでdockerdコマンド(Dockerのdaemonを操作するコマンド)が使えない問題は解決できていません... 

ts0818.hatenablog.com

 

結論から言うと、2018年9月30日(日)現在、Python 3.7でTensorFlowは使えないっぽいです...

github.com

⇧  上記サイト様で、直したよんって言葉を信じてハマりました...直ってない気が...少なくとも自分の環境では駄目でした。

なので、今回もお時間のある方のみご照覧ください。 

そいでは、レッツトライ~。 

 

その前に、What's 機械学習

そもそも、機械学習っていうものがよく分かっておらんのですよ、あたしゃ。 

誤解を恐れずに言うと、人間が学習するように、機械にも学習することができるか?っていうことを試行錯誤するあれこれってことですかね。

機械って、処理が正確だし速いしで、人間には真似できないことをサラリとやってのけますね。よく、マシーンのように正確だ、とか喩えで使われますしね。

だが、しか~し!

脳科学で著名な池谷裕二さんの、


進化しすぎた脳 中高生と語る「大脳生理学」の最前線

⇧  上記 の本で出てきた話なのですが、人間と機械には決定的な違いがあったという。

それは、情報のインプットに対し、人間はアウトプットを変えることができるが、機械は常に同じということを仰っていました。

インプットが同じ場合、

人間の場合のインアウトのイメージ図

f:id:ts0818:20180411230350p:plain

⇧   アウトプットに至るまでの情報回路が毎回違ったものになってます。

 

機械の場合のインアウトのイメージ図

f:id:ts0818:20180411230823p:plain

⇧  アウトプットに至るまでの情報回路は常に一定。

 

従来であれば、機械は同じInputを与えれば必ず同じOutputを返すという宿命を持っていたわけですが。

機械学習によって、この定説が覆されているようです。

 

機械学習」と「ディープラーニング」は何が違うのか?

AI(人工知能)に学習させるのにもステップバイステップで、段階を踏んでいく必要があるようですね。

イメージ図 

f:id:ts0818:20180411220903p:plain

⇧  ざっくりとしたイメージ図だと、機械学習を突き詰めいてくと、ディープラーニングに至るという感じですかね? 

 

 

Mahout( Apache Mahout )って?

今回は、使いませんが、Javaで利用できる機械学習ライブラリのApache Mahoutとは?

Wikipediaさ~ん!

⇧  正式名称は、 Apache Mahout  ってことみたいですね。

Apache Mahoutは、協調フィルタリングクラスタリングクラス分類に特化されたスケーラブルなアルゴリズムを実装している。これらの実装の多くは、Apache Hadoopのプラットフォームが使用されている。

Apache Mahout - Wikipedia

⇧  Hadoopは、名前だけは聞いたことがありましたが、 Hadoop無いと駄目なんですかね?(⇐ Hadoop無くても利用できるみたいです。)

Mahoutでは、一般的な線形代数や統計などの数学操作のためのJavaライブラリやプリミティブ型を提供している。

Apache Mahout - Wikipedia

⇧  計算系に強いってことですかね。 

Apache Mahout - Wikipedia

Mahoutは現在開発中であり、実装されたアルゴリズムの数は急速に増えている。しかし、アルゴリズムの種類は未だ満たされたものとは言えない。

Apache Mahout - Wikipedia

⇧  まさかの駄目だし...。

Mahoutのコアとなるクラスタリング、クラス分類のアルゴリズムは、Apache HadoopMapReduceパラダイム上に実装されているが、これによってHadoopを利用しないと実装が制限されるわけではない。

Apache Mahout - Wikipedia

⇧  お!Hadoopが導入できなくても利用できそうです。 

したがって、単一ノード、もしくはHadoopクラスタ以外での実行も推奨されている。

Apache Mahout - Wikipedia 

例えば、Mahoutを使う上でメインディッシュとなる、協調フィルタリングによるレコメンダシステムコンポーネントは、Hadoopを使わない環境でも実行することができる。 PregelGoogle社で開発)ライクなGiraphなどの開発途上のプロジェクトとの統合も積極的に議論されている。

Apache Mahout - Wikipedia

 

「Mahout」は、Hadoopのスケーラビリティを生かし、ビッグデータを用いた機械学習を可能にするライブラリです。レコメンド、クラスタリングといった機械学習アルゴリズムMapReduceで実装されており、コマンド・ラインやAPIからパラメータを指定するだけで、それらを利用できます。

試すのが難しい―機械学習の常識はMahoutで変わる:ビッグデータ処理の常識をJavaで身につける(4) - @IT

www.atmarkit.co.jp

⇧  上記サイト様が詳しいですかね。

時間のある時に試していきたいですね。

 

TensorFlow って?

それでは、Pythonで利用できる機械学習ライブラリであるTensorFlowとは? 

TensorFlowテンソルフロー)とは、Googleが開発しオープンソースで公開している、機械学習に用いるためのソフトウェアライブラリである。

TensorFlow - Wikipedia

Pythonじゃなくても使えるみたいですね。 

対応プログラミング言語C言語C++PythonJavaGo。 対応OS64ビットLinux(ただしバイナリ配布はUbuntu用)、macOSWindows。ハードウェアは CPUNVIDIA GPUGoogle TPUSnapdragon Hexagon DSP などに対応していて、Android Neural Networks API 経由で Android 端末のハードウェアアクセラレータも使用できる

TensorFlow - Wikipedia

学習させるために必要なデータが重要らしいですね 。

AIにも詳しいルーカス・ビーワルド英語版は、GoogleはTensorFlowのコードオープンソースにした事で、AIの真の価値はAIの「エンジン」ではなく、AIを賢くするのに必要な「データ」である事を示したと語った。そのためGoogleは「データ」の部分は公開しないだろうと述べた

TensorFlow - Wikipedia

 

www.sejuku.net

 

⇧  上記サイト様によりますと、『Tensorテンソル)= 多次元配列』みたいなイメージらしいです。

 

公式の説明だと、

www.tensorflow.org

TensorFlow は本来、Google のマシン インテリジェンス研究組織内の Google Brain チームに参加している研究者やエンジニアが機械学習や高度なニュートラル ネットワークの研究用に開発したものでしたが、このシステムは汎用性が高く、他の領域にも幅広く適用することができます。

TensorFlow

う、う~ん...よく分からんですが、

より具体的に言えばTensorFlowは多次元のデータ構造を、流れるように処理することができる深層学習(ディープラーニング)を行えるライブラリとなります。

TensorFlowとは何か?基礎の基礎をわかりやすく解説! | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト

ということらしいです。 

 

まずは、TensorFlow を試してみようとしたが...

とりあえず、Python環境が構築でき、TensorFlowをインストールできているという前提で参りたいと思います。

自分の場合は、Visual Studio CodePythonの実行環境を作っています。 

ts0818.hatenablog.com

 

なので、Visual Studio CodePythonを実行する形で話を進めていきたいと思います。

まずは、Visual Studio Code を起動。

f:id:ts0818:20180929144654p:plain

「ファイル(F)」>「フォルダーを開く(F)...」をクリック。

f:id:ts0818:20180929144813p:plain

デスクトップに作成していたPythonのプロジェクト を指定し「フォルダーの選択」。

f:id:ts0818:20180929145108p:plain

「HelloPython」ディレクトリ直下にPythonの仮想環境となる「.venv」というディレクトリを作成し、その中に「hello.py」というファイルを作成していました。

f:id:ts0818:20180929145257p:plain

 

「hello.py」をそのまま使っても良いのですが、TensorFlow用に、新しくpythonのファイルを作成しときます。

f:id:ts0818:20180929150250p:plain プロジェクトのディレクトリの名前の部分にカーソルを持っていくと表示される、f:id:ts0818:20180929150215p:plain をクリックすることで、新規ファイルが作成できます。

f:id:ts0818:20180929150003p:plain

ファイル名を適当に入力します。 

f:id:ts0818:20180929150531p:plain

今回は、「tens.py」としました。 

f:id:ts0818:20180929150712p:plain

ファイルが作成されました。

f:id:ts0818:20180929150800p:plain

ファイルを編集。 

import tensorflow as tf
hello = tf.constant('Hello, Hello World!')
sess = tf.Session()
print(sess.run(hello))    

そしたらば、保存します。

ソースコードを実行してみます。

f:id:ts0818:20180929160051p:plain のアイコンをクリックし、「デバック」が、「Python:Current File」になっている状態で、f:id:ts0818:20180929160311p:plain をクリック。

f:id:ts0818:20180929160155p:plain

で、エラー。

f:id:ts0818:20180929161906p:plain

⇧  何でも、Python 3.7 で「async」というキーワードが予約語になったことによる影響らしい。というか、Pythonの開発者、いまさら「async」を予約語にしてんじゃね~!

絶対に既存のライブラリに影響するでしょうが!Google様が作り出したTensorFlowも例外でなく、見事にエラーになりますな。

 

stackoverflow.com

 

⇧  「async」なってるところを「async1」に変えちゃえばOKって言ってるけど...

まぁ、たしかに、予約語を使わないことにはなるんでしょうけど、根本的な解決になってない気はしますね。

なんか、

github.com

⇧  Python 3.7 でも、tensorflow を動くようにしたよ!ってありますね。2018年8月28日にmasterにマージしたって言ってますね。

https://github.com/tensorflow/tensorflow/releases によると、「TensorFlow 1.11.0」が最新版としてリリースされたのが、2018年9月27日らしいと。

最新版のTensorFlowなら、Python 3.7 でも動くと。

 

tensorflowのバージョンを確認

ちなみに、pipでインストールしたpythonのライブラリなんかは、プロジェクトのディレクトリの中に作成したPythonの仮想環境のディレクトリである「.venv」の下にディレクトリが作られ、「Pythonのプロジェクトディレクトリ¥.venv¥Lib¥site-packages」に格納されるようです。f:id:ts0818:20180929170847p:plain

Visual Studio Codeのターミナルで、Pythonの仮想環境にログインして、tensorflowのバージョンを確認してみます。(Windowsの場合、ターミナルのデフォルトは、PowerShellになっているかと。)

PowerShellの場合は、「.venv¥Scripts¥activate.ps1」を実行する感じで。

f:id:ts0818:20180929171736p:plain

では、Visual Studio Codeのターミナルで、下記コマンドを実行。 

[Pythonの仮想環境ディレクトリ]\Scripts\activate.ps1    

f:id:ts0818:20180929172313p:plain

先頭に、「(.venv)」って付いていれば、Pythonの仮想環境にログインできたということみたいです。

pip list で、インストール済みのライブラリの一覧が確認できます。

f:id:ts0818:20180929172824p:plain

で、インストール済の個別のライブラリのバージョンを確認するには、 

pip show [ライブラリ名]  

f:id:ts0818:20180929173043p:plain

でいけるそう。tensorflowのバージョンは、1.10.1 ってなってますね。

https://github.com/tensorflow/tensorflow/releases によると、「TensorFlow 1.11.0」が最新版としてリリースされているらしいです、2018年9月28日(土)現在。

pipで最新版にアップデートできるのか分かりませんが、試してみます。と思ったら、pipenv(pipでインストールできる)でなら、tensorflow の依存関係のパッケージも良しなに取り計らってくれるということで、

pipenv update tensorflow  

f:id:ts0818:20180929193330p:plain

良しなに取り計らって...ないという...駄目じゃん、全く依存関係を解決できてないじゃん... 

github.com

⇧  前回のときも、依存関係のキャッシュをクリアすればイケるって言っていてイケなかったんですが...

f:id:ts0818:20180929200459p:plain

⇧  やっぱ変わらんですね。

 

github.com

⇧  ナイスガイのほうでトライ。

 

f:id:ts0818:20180929203100p:plain

f:id:ts0818:20180929203206p:plain

f:id:ts0818:20180929203235p:plain

f:id:ts0818:20180929203311p:plain

途中まで、何か処理が進んだけど、結局、最後は同じ結果ですが... 

f:id:ts0818:20180929203609p:plain

まぁ、何の進展もないという... 

f:id:ts0818:20180929203953p:plain

pipでアップデートしようとしたら、見つからんと。

f:id:ts0818:20180929204312p:plain

www.task-notes.com

⇧  上記サイト様によりますと、「pip install -U [パッケージ名]」でした。

f:id:ts0818:20180929205813p:plain

何となく、予想はしてたけど、pipでインストールできる最新に、1.11.0 は含まれていないみたい、と思ったら、

f:id:ts0818:20180929210015p:plain

パッケージの検索で、LATEST: 1.11.0 ってあるやんけ~!

f:id:ts0818:20180929221023p:plain

更新できるパッケージでも、tensorflowあるやん!

f:id:ts0818:20180929221655p:plain

qiita.com

⇧  上記サイト様によりますと、全部更新は、

pip list -o | awk '{print $1}' | xargs pip install -U 

でOKらしい。

f:id:ts0818:20180929221938p:plain

⇧  駄目ですけど...そもそも、Windowsawk がデフォルトで使えるとは思えないし、これ、完全にLinuxとかの話ですかね? 

 

致し方ないですが、Windowsの場合は、「pip-tools」をインストール って感じになりますかね。(「awk」をインストールでもOKかもしれませんが。)おりゃ~。

pip install pip-tools

f:id:ts0818:20180929222933p:plain

インストールされたか確認しておきます。

pip show pip-tools

f:id:ts0818:20180929223401p:plain

そしたら、今回は全部更新しちゃいます。(本番のプロジェクトとかだと御法度ですよ~、たぶん。) 

pip-review –auto

f:id:ts0818:20180929223635p:plain

はい、エラー、話が違うんですが...

github.com

⇧  はい、出た~。Windows環境で、Python3系では、pip-review は使えませんというWindows除け者問題。

いや~、Windowsでのpython利用は壁が多すぎますな~。

どうやら、

github.com

pip-review was originally part of pip-tools but has been discontinued as such. See Pin Your Packages by Vincent Driessen for the original introduction. Since there are still use cases, the tool now lives on as a separate package.

GitHub - jgonggrijp/pip-review: A tool to keep track of your Python package updates.

 ⇧ pip-toolsの一部であった pip-reviewが、独立したらしい。つまり、「pip-review」単体でインストールしてということらしい...そんなピン芸人になりました~みたいな軽いノリで来られても困るんですけどね。

おりゃ~。

pip install pip-review

f:id:ts0818:20180929225742p:plain

インストールできました。 

f:id:ts0818:20180929225810p:plain

パッケージの一括更新。

pip-review -auto

f:id:ts0818:20180929230344p:plain

f:id:ts0818:20180929230638p:plain

f:id:ts0818:20180929230722p:plain

⇧  とりあえず、tensorflowの更新に必要なパッケージの更新はできたっぽいですかね。 

 

github.com

⇧  上記サイト様によりますと、最新の依存パッケージをインストールした状態で、

  • You pin the new version of (or unpin) whatever package you want in your Pipfile
  • You run Pipenv update
  • Pipenv runs pipenv lock as a result in order to make sure that your change is also OK with the rest of the packages you have installed
  • Pipenv then runs pipenv sync to sync the new lockfile with your environment

lockファイルを更新してあげれば、いけるらしいとのこと。

f:id:ts0818:20180929231654p:plain

f:id:ts0818:20180929231840p:plain

f:id:ts0818:20180929231918p:plain

⇧  何となく、希望の光が!

では、改めて、tensorflow を更新してみます。 

pipenv update tensorflow

f:id:ts0818:20180929232233p:plain

⇧  駄目や~ん!

キャッシュを消してみます。

f:id:ts0818:20180929232559p:plain

f:id:ts0818:20180929233140p:plain

⇧  変わらんやんけ!

pipでアップデートしようとしたら、

f:id:ts0818:20180929233355p:plain

f:id:ts0818:20180929234330p:plain

⇧  依存関係のパッケージのバージョン下げてるし...意味不明

バージョン指定とかしても、 エラーになる。

f:id:ts0818:20180929234023p:plain

一旦、アンインストール。

f:id:ts0818:20180930002829p:plain

そして、インストール。

f:id:ts0818:20180930002941p:plain

エラー、意味が分からん...バージョン指定しなければ最新版がインストールされるって話のはずだけど? 

f:id:ts0818:20180930003208p:plain

⇧  パッケージ検索で、1.11.0 ってなってますけど?何故、インストールされない? 

zipから直接インストールしようとするもエラー。

f:id:ts0818:20180930015241p:plain

qiita.com

⇧  上記サイト様によりますと、

pip install --upgrade setuptools

でいけるらしい。

f:id:ts0818:20180930015635p:plain

⇧  駄目でした... 

どうやら、2018年9月30日(日)現在において、

github.com

f:id:ts0818:20180930175214p:plain

⇧ Python3.7でtensorflowを利用するには、pip によるインストールは不可らしい...バッケージ管理ツールの意味が全く無いという...。

「protobuf」「eigen」っていうパッチファイルのテキストを使うみたいです。

f:id:ts0818:20180930180412p:plain

f:id:ts0818:20180930180325p:plain

それぞれの遷移先の、「Download Zip」をクリックでダウンロードしておきます。

f:id:ts0818:20180930180514p:plain

 

ということで、

github.com

⇧  上記で、zipで落としたものを、直接配置してみます、もはやパッケージ管理が何の意味もなしていないけど。「Pythonのプロジェクトディレクトリ¥.venv¥Lib¥site-packages」に配置してます。

f:id:ts0818:20180930010301p:plain

f:id:ts0818:20180930005928p:plain

f:id:ts0818:20180930010352p:plain

で、配置できましたら、 先程ダウンロードしておいたパッチファイルを、配置します。

f:id:ts0818:20180930181107p:plain

f:id:ts0818:20180930181124p:plain

ファイルを置き換えるって聞かれた場合は、置き換えます。

f:id:ts0818:20180930181049p:plain

そしたらば、「workspace.bzl」ってファイルに、

patch_file="//tensorflow:[protobuffilename.txt]"
patch_file="//tensorflow:[eigen3filename.txt]"

を追記するようです。

Visual Studio Code で、「Pythonのプロジェクトディレクトリ¥.venv¥Lib¥site-packages¥tensorflow¥workspace.bzl」を開いて、

f:id:ts0818:20180930182146p:plain

    PROTOBUF_URLS = [
        "https://mirror.bazel.build/github.com/google/protobuf/archive/v3.6.0.tar.gz",
        "https://github.com/google/protobuf/archive/v3.6.0.tar.gz",
    ]
    PROTOBUF_SHA256 = "50a5753995b3142627ac55cfd496cebc418a2e575ca0236e29033c67bd5665f4"
    PROTOBUF_STRIP_PREFIX = "protobuf-3.6.0"

ってなってるところを、

    PROTOBUF_URLS = [
        "https://mirror.bazel.build/github.com/google/protobuf/archive/v3.6.0.tar.gz",
        "https://github.com/google/protobuf/archive/v3.6.0.tar.gz",
    ]
    PROTOBUF_SHA256 = "50a5753995b3142627ac55cfd496cebc418a2e575ca0236e29033c67bd5665f4"
    PROTOBUF_STRIP_PREFIX = "protobuf-3.6.0"
    PROTOBUF_patch_file = "//tensorflow:protobuf-patch.txt"

とし、

 

    tf_http_archive(
        name = "eigen_archive",
        urls = [
            "https://mirror.bazel.build/bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz",
            "https://bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz",
        ],
        sha256 = "d956415d784fa4e42b6a2a45c32556d6aec9d0a3d8ef48baee2522ab762556a9",
        strip_prefix = "eigen-eigen-fd6845384b86",
        build_file = clean_dep("//third_party:eigen.BUILD"),
    )    

ってなってるところを、

    tf_http_archive(
        name = "eigen_archive",
        urls = [
            "https://mirror.bazel.build/bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz",
            "https://bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz",
        ],
        sha256 = "d956415d784fa4e42b6a2a45c32556d6aec9d0a3d8ef48baee2522ab762556a9",
        strip_prefix = "eigen-eigen-fd6845384b86",
        build_file = clean_dep("//third_party:eigen.BUILD"),
        patch_file = "//tensorflow:eigen-win32-patch.txt"
    )

とします。そしたら、「workspace.bzl」を保存します。

そうすると、tensorflow 自体のインポートは上手くいきますが、Constの問題が残っているようです。

f:id:ts0818:20180930184700p:plain

That seems to be the place for working on what will be the final version, but I'm just putting this out there if anyone wants a quick fix in the meantime (currently that PR conflicts). This version casts away consts, so it isn't exactly safe but should be fine if you just want things up and running. Tensorflow overuses const_cast but that is an issue for another day.

Just merging this branch into your own work is an easy option if you need to build for 3.7. I'll close this PR when the other branch gets finished.

Quick Fix for Python 3.7 by bstriner · Pull Request #21202 · tensorflow/tensorflow · GitHub

で、無理やりデバッグで実行してみたら、

f:id:ts0818:20180930204152p:plain

結局、tensorflowのライブラリ読み込めないんかい! 

なんか、結局、Windowsでは、いまのところpython3.7でtensorflowは動かんらしいっすね、動いたって言ってる人も結果を載せてくれてないから信憑性が無いし。

まぁ、Python 3.7の対応版のTensorFlowが出るまでは、Python 3.6 にダウングレードして利用していくしか無いっすかね。

いや~、時間を無駄にしてしまった...何か、最近こんなばっかりで、徒労感が半端ないっすね、まぁ、Python初心者なんで、こんなもんですかね。

ということで、2018年9月30日(日)現在、Python 3.7 に、少なくともOfficialなTensorFlowは対応してないらしいので気をつけてくださいということで。

個人的に思ったことは、Python 3.7 を出すタイミングは時期尚早だったんじゃないかと思うんですがね、しばらくしたらPython 3.8 も出るとかいう話ですし、何がしたいのかよく分からんですね...。

時間あるときに、Python 3.6系でTensorFlowは試していくということで。

 

2018年10月1日(月)追記:↓  ここから

ということで、Python 3.6系を導入しようということで、

stackoverflow.com

⇧  上記サイト様によりますと、Chocolateyでインストール先を指定できるっつうんで、Python 3.6系をChocolatey でインストールしようとしたら、

choco install python3 --version 3.6.6 -y -o -ia "'/qn /norestart ALLUSERS=1 TARGETDIR=c:\Python36'"   

f:id:ts0818:20181001205328p:plain

⇧  できないやんけ~!どうやらPython3系(自分の場合、Python 3.7がインストールされています)が既にインストールされてるとNGらしい。 

そういった場合は、multiple version というオプションでいけるらしい。おりゃ~!

choco install python3 --version 3.6.6 -y -o -ia "'/qn /norestart ALLUSERS=1 TARGETDIR=c:\Python36'" -m  

f:id:ts0818:20181001210746p:plain

f:id:ts0818:20181001210934p:plain

そしたら、インストーラーが立ち上がるので、「Customize installation」を選択。

f:id:ts0818:20181001211056p:plain

このへんは、デフォルトの状態にしました。(よく分からんです)。「Next」をクリック。

f:id:ts0818:20181001211151p:plain

そしたらば、「Browse」をクリックして、インストール先を指定します。

環境変数にPath を通してはいけないようなので、「Add Python to enviroment variables」にチェックが入っている場合は、必ずチェックを外します。

f:id:ts0818:20181001211448p:plain

今回は、「C:\Python3.6」に配置したいと思います。Cドライブを選択した状態で、「新しいフォルダーの作成(N)」 を選択。

f:id:ts0818:20181001211743p:plain

名前を入力する状態になるので、

f:id:ts0818:20181001211417p:plain

Python 3.6」にしました。

f:id:ts0818:20181001211925p:plain

そしたらば、「OK」で。

f:id:ts0818:20181001212006p:plain

そしたら、「Install」で。

f:id:ts0818:20181001212050p:plain

f:id:ts0818:20181001212122p:plain

そしたらば、「Close」で。

f:id:ts0818:20181001212157p:plain

これで、 Python 3.6 もインストールできました。(フォルダー名が...「Python36」にすべきだった。)

f:id:ts0818:20181001212500p:plain

gammasoft.jp

⇧  上記サイト様によりますと、Python 3.3 以上で、py.exe というものが導入され、Pythonが複数インストールされている場合に便利らしい。

f:id:ts0818:20181001214643p:plain

⇧  バージョンを指定しないと、環境変数にパスが設定されているほうが優先されるってことですかね?

一応、Python 3.6 系のほうにも、pipenv をインストールしていきたいと思います。

py -3.6 -m pip install pipenv  

f:id:ts0818:20181001215016p:plain

f:id:ts0818:20181001215125p:plain

⇧  パスに関して警告されてもね... 

f:id:ts0818:20181001215513p:plain

⇧  とりあえず、Python 3.6.6 のほうに、pipenv インストールできたようです。 

Python 3.6.6 の pipのバージョンも上げときます。

py -3.6 -m pip install --upgrade pip  

f:id:ts0818:20181001215715p:plain

f:id:ts0818:20181001215901p:plain

 

 

では、Python3.6を利用するようのプロジェクトディレクトリを適当に作成します。「ReHelloPython」というディレクトリをデスクトップに作成。

f:id:ts0818:20181001212912p:plain

Visual Studio Code を起動。

「ファイル(F)」>「フォルダーを開く(F)...」を選択。

f:id:ts0818:20181001213206p:plain

さきほど作成したディレクトリを選択。

f:id:ts0818:20181001213309p:plain

そしたらば、今度は、「表示(V)」>「ターミナル(T)」を選択。

f:id:ts0818:20181001213541p:plain

ターミナルとして、PowerShellが起動するので、

f:id:ts0818:20181001213719p:plain

Python3.6.6 の仮想環境を作成します。「C:¥Python3.6」の部分は、ご自分のインストール先に合わせてください。

pipenv --python C:\Python3.6\python.exe

f:id:ts0818:20181001220127p:plain

⇧  「.venv」が作成されていればOK。

そしたらば、Pythonの仮想環境にログインするための、PowerShell用のスクリプトが用意されているので、ターミナルで実行します。

自分の場合ですと、「C:\Users\Toshinobu\Desktop\ReHelloPython\.venv\Scripts\activate.ps1」ってファイルになります。

f:id:ts0818:20181001220804p:plain

仮想環境にログインします。

.venv\Scripts\activate.ps1

f:id:ts0818:20181001221110p:plain

Visual Studio Codeで、Pythonを実行できるように設定。

f:id:ts0818:20181001223120p:plain をクリック。デバックの▽ボタンをクリックで、「構成の追加...」を選択。

f:id:ts0818:20181001223201p:plain

「launch.json」ファイルというものが作成されます。はじめての場合、ファイル作成前に、プログラミング言語の選択が出てくるかもなので、そのときは「Python」を選択してください。

f:id:ts0818:20181001223331p:plain

「launch.json」ファイルの以下の部分を、

{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        },
        ...省略

以下のように編集します。

{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "env": {
                "PYTHONPATH": "${workspaceFolder}"
            },
            "console": "integratedTerminal"
        },
        ...省略

 

そしたら、ターミナルで、TensorFlow をインストール。仮想環境の中であれば、普通にpipコマンドを使っても、Python 3.6.6 のほうのpipって認識されるんではなかろうか。 

pip install tensorflow

f:id:ts0818:20181001221738p:plain

⇧  tensorflow 1.11.0 がインストールされています。

では、Visual Studio Codeエクスプローラーで、pythonのファイルを作成します。

いまだに、「.venv」の中にPythonファイルを作成すべきなのかがよく分からんですが「.venv」を選択した状態で、f:id:ts0818:20181001222514p:plain をクリックすることで、新しいファイルを作成します。

f:id:ts0818:20181001222201p:plain

適当にファイル名を。拡張子は「.py」で。

f:id:ts0818:20181001222338p:plain

ファイルを編集。

import tensorflow as tf
hello = tf.constant('Hello, Hello World!')
sess = tf.Session()
print(sess.run(hello))

で保存すると、

f:id:ts0818:20181001224419p:plain

⇧  pylint による警告が。  

mmmmemo.com

⇧  上記サイト様によりますと、とりあえず、実行もされてimportもできるらしい。何でもVisual Studio Code 側の問題らしい。 

本当に実行できるのか、トライ。f:id:ts0818:20181001223120p:plain をクリックで、デバッグ

f:id:ts0818:20181001224632p:plain 思いっきり、例外が発生しとるのだが...

f:id:ts0818:20181001224822p:plain

とりあえず、デバッグを停止して。

f:id:ts0818:20181001225103p:plain

「ターミナル」に戻って、

f:id:ts0818:20181001225200p:plain

仮想環境にログインし直して、

f:id:ts0818:20181001225257p:plain

pylint をpip でインストール。

f:id:ts0818:20181001225349p:plain

f:id:ts0818:20181001225424p:plain

⇧  しても効果ナッシィングビート。

yaju3d.hatenablog.jp

⇧  上記サイト様によりますと、「ファイル(F)」>「基本設定(P)」>「設定(S)」から、

f:id:ts0818:20181001230053p:plain

ワークスペースの設定」の編集でイケるらしい。

f:id:ts0818:20181001230149p:plain

ってなってるのを、

{
    "python.pythonPath": "C:\\Users\\Toshinobu\\Desktop\\HelloPython\\.venv\\Scripts\\python.exe"
}

いまのPythonのプロジェクトのものに合わせます。

{
    "python.pythonPath": "C:\\Users\\Toshinobu\\Desktop\\ReHelloPython\\.venv\\Scripts\\python.exe"
}

で、保存。インポートエラーが消えました!

f:id:ts0818:20181001230616p:plain

デバッグの実行の結果は?

f:id:ts0818:20181001230718p:plain

無事、実行できました!

tensorflow を使ってのHello World にここまで躓く人間は私ぐらいなもんでしょうね(涙)。

 

2018年10月1日(月)追記:↑  ここまで

 

今回はこのへんで。