ラベル Python の投稿を表示しています。 すべての投稿を表示
ラベル Python の投稿を表示しています。 すべての投稿を表示

Windows10にGPU環境で動くYOLOv5を構築したら

 うちのPCは Intel(R) Core(TM) i5-6600 CPU @ 3.30GHz   3.30 GHz ……第6世代のCorei5という古いマシンなのですが、GeForce RTX 2060というグラフィックボードが搭載されています。

ゲームしているわけじゃないんですが、1年位前に税込みで4万円を切る価格で販売されていてなんとなく装着したのです。2021年6月5日現在6万円後半の値付けになっていて驚きなんですが。


で、GPU機能を使ったyolov5を動かしてみたわけです。

結論から言うと、ちゃんと動作しています。

レシピを残しておきましょう。


環境:

OS:Windows10(バージョン21H1)

GPU:GeForce RTX 2060

CUDA:11.3.109

miniconda利用


0.GeForceのドライバーのインストール

これはさすがにインストール済みだと思うが、念のためにここからダウンロードしてインストールすることが可能。

https://www.nvidia.com/Download/index.aspx?lang=en-us


1.Visual Studioをインストールする

https://visualstudio.microsoft.com/ja/downloads/

からCommunityバージョンをダウンロード・インストールする。

僕が使用したのは、Visual Studio 2019でした。

途中でワークロードについて問われるので、「C++によるデスクトップ開発」を選択しておく必要があります。


2.CUDA Toolkitをインストールする

https://developer.nvidia.com/cuda-toolkit-archive

ここから、CUDA Toolkitをダウンロードしてきます。

今回はCUDA Toolkit 11.3.1(May2021)をインストールします。


Pathが通っているか確認するため、スタートキーの設定ボタンから→システム→詳細情報→システムの詳細設定→環境設定へ移動


ユーザー環境変数Pathのところで

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\libnvvp


が存在しているか確認(バージョンが変われば上記の記述は変わってゆくことでしょう。また、何らかの理由でCUDAのイントールドライブ、フォルダが異なれば変わってゆくことでしょう)。


システム環境変数で、

変数名:CUDA_PATH

変数値:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3


変数名:CUDA_PATH_V11_3

変数値:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3


になっていれば、まずはOK。


PCをリブートしてPathの設定を有効にします。

PCのリブートが終わったらコマンドプロンプトでも、PowerShellでもどちらでもよいので立ち上げて動作テストをします。


> nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2021 NVIDIA Corporation

Built on Mon_May__3_19:41:42_Pacific_Daylight_Time_2021

Cuda compilation tools, release 11.3, V11.3.109

Build cuda_11.3.r11.3/compiler.29920130_0


と表示されればCUDAのインストールは成功しています。


3.cuDNNをインストール

ダウンロードするにあたってnvidiaにアカウントを作る必要があります(無料)。

https://developer.nvidia.com/cuDNN


このページの「Download cuDNN」ボタンをクリックし、ログインページを進んでゆきます。


「Download cuDNN v8.2.0 (April 23rd, 2021), for CUDA 11.x」を選択。

cuDNN Library for Windows(x86)を選択し、ダウンロードしてきます。


ローカルでzipファイルを展開します。

展開したフォルダにcudaがありますからそこに入ると、

bin

include

lib

の3つのフォルダをコピーし、

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3

で上書き貼り付け(要は貼り付け)します。


先ほどのCUDAでPathを通したように、環境変数のところへ行き、システム環境設定に新規で下記情報を書き込みます。


変数名:CUDNN_PATH

変数値:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3


PCをリブートしてシステム環境設定を有効にします。

PCのリブートが終わったらコマンドプロンプトを立ち上げて動作テストをします。


a>where cudnn64_8.dll

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\bin\cudnn64_8.dll


と表示されれば、cuDNNのインストールは成功です。


4.Minicondaをインストール

ノーマルにPythonをインストールして構築する方法もあるのですが、個人的にM1 Mac miniでMinicondaを動かしている関係で、Minicondaベースで構築します。


https://docs.conda.io/en/latest/miniconda.html

からPython 3.9をバージョンであるMiniconda3 Windows64-bitをダウンロード・インストールします。(僕は個人的事情でDドライブにインストールしました)

途中でPathを環境変数に登録するか尋ねられますが、僕はチェックを入れてインストーラーに登録してもらいました。


インストールが終わったらPCをリブートします。


スタートメニューにAnaconda Powershell Prompt(miniconda3)と、Anaconda Prompt(miniconda3)の二つがいると思います。僕はPowershellバージョンを使用しています。


> conda -V

conda 4.9.2


> python --version

Python 3.9.1


と表示されれば問題なしと思います。


Anaconda本体をアップデートしておきましょう。

> conda update -n base conda


僕の環境ではcondaのバージョンがconda 4.10.1にアップデートされました。


Anacondaのすべてのパッケージをアップデートしておきます。

> conda update --all


僕の環境ではPythonのバージョンがPython 3.9.5になっていました。

進化が速いですね。。。


5.gitをインストール

インストール済みの人はスキップしてください。

未インストールの人は下記を参考にインストールします。

https://www.curict.com/item/60/60bfe0e.html


6.Minicondaで仮想環境を作る

下記を入力します。環境名の部分はお好きな文字で。

> conda create -n 環境名 python


僕はべたにyolov5としたので下記のようになりました。

> conda create -n yolov5 python


仮想環境で作業するときは、Anaconda Powershell Promptを立ち上げて、

> conda activate 環境名

を入力することで仮想環境に入って行けます。


★以降は仮想環境に入った状態であることが前提で進みます。


7.YOLOv5のダウンロードとインストール


下記コマンドを入力すると、Windpwsユーザーフォルダ内にyolov5というフォルダが作られます。

> git clone https://github.com/ultralytics/yolov5.git


作られたyolov5のフォルダに移動します。


下記コマンドを実行します。

>pip install -U -r requirements.txt


インストール作業が進んで行きます(トラブルのないインストールは見てて楽しい)。


Collecting matplotlib>=3.2.2

  Using cached matplotlib-3.4.2-cp39-cp39-win_amd64.whl (7.1 MB)

Collecting numpy>=1.18.5

  Using cached numpy-1.20.3-cp39-cp39-win_amd64.whl (13.7 MB)

Collecting opencv-python>=4.1.2

  Using cached opencv_python-4.5.2.52-cp39-cp39-win_amd64.whl (34.7 MB)

Collecting Pillow

  Using cached Pillow-8.2.0-cp39-cp39-win_amd64.whl (2.2 MB)

Collecting PyYAML>=5.3.1

  Using cached PyYAML-5.4.1-cp39-cp39-win_amd64.whl (213 kB)

Collecting scipy>=1.4.1

  Using cached scipy-1.6.3-cp39-cp39-win_amd64.whl (32.7 MB)

Collecting torch>=1.7.0

  Using cached torch-1.8.1-cp39-cp39-win_amd64.whl (190.5 MB)

Collecting torchvision>=0.8.1

  Using cached torchvision-0.9.1-cp39-cp39-win_amd64.whl (852 kB)

Collecting tqdm>=4.41.0

  Using cached tqdm-4.61.0-py2.py3-none-any.whl (75 kB)

Collecting tensorboard>=2.4.1

  Using cached tensorboard-2.5.0-py3-none-any.whl (6.0 MB)

Collecting seaborn>=0.11.0

  Using cached seaborn-0.11.1-py3-none-any.whl (285 kB)

Collecting pandas

  Using cached pandas-1.2.4-cp39-cp39-win_amd64.whl (9.3 MB)

Collecting pycocotools>=2.0

  Using cached pycocotools-2.0.2-cp39-cp39-win_amd64.whl

Collecting thop

  Using cached thop-0.0.31.post2005241907-py3-none-any.whl (8.7 kB)

Collecting cycler>=0.10

  Using cached cycler-0.10.0-py2.py3-none-any.whl (6.5 kB)

Collecting pyparsing>=2.2.1

  Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)

Collecting kiwisolver>=1.0.1

  Using cached kiwisolver-1.3.1-cp39-cp39-win_amd64.whl (51 kB)

Collecting python-dateutil>=2.7

  Using cached python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)

Collecting typing-extensions

  Using cached typing_extensions-3.10.0.0-py3-none-any.whl (26 kB)

Collecting tensorboard-data-server<0.7.0,>=0.6.0

  Using cached tensorboard_data_server-0.6.1-py3-none-any.whl (2.4 kB)

Collecting grpcio>=1.24.3

  Using cached grpcio-1.38.0-cp39-cp39-win_amd64.whl (3.2 MB)

Collecting tensorboard-plugin-wit>=1.6.0

  Using cached tensorboard_plugin_wit-1.8.0-py3-none-any.whl (781 kB)

Requirement already satisfied: wheel>=0.26 in d:\miniconda3\envs\yolov5\lib\site-packages (from tensorboard>=2.4.1->-r requirements.txt (line 15)) (0.36.2)

Collecting werkzeug>=0.11.15

  Using cached Werkzeug-2.0.1-py3-none-any.whl (288 kB)

Collecting markdown>=2.6.8

  Using cached Markdown-3.3.4-py3-none-any.whl (97 kB)

Collecting protobuf>=3.6.0

  Downloading protobuf-3.17.2-py2.py3-none-any.whl (173 kB)

     |████████████████████████████████| 173 kB 6.8 MB/s

Collecting absl-py>=0.4

  Using cached absl_py-0.12.0-py3-none-any.whl (129 kB)

Collecting google-auth<2,>=1.6.3

  Using cached google_auth-1.30.1-py2.py3-none-any.whl (146 kB)

Collecting requests<3,>=2.21.0

  Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)

Collecting google-auth-oauthlib<0.5,>=0.4.1

  Using cached google_auth_oauthlib-0.4.4-py2.py3-none-any.whl (18 kB)

Requirement already satisfied: setuptools>=41.0.0 in d:\miniconda3\envs\yolov5\lib\site-packages (from tensorboard>=2.4.1->-r requirements.txt (line 15)) (52.0.0.post20210125)

Collecting pytz>=2017.3

  Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)

Collecting cython>=0.27.3

  Using cached Cython-0.29.23-cp39-cp39-win_amd64.whl (1.7 MB)

Collecting six

  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)

Collecting rsa<5,>=3.1.4

  Using cached rsa-4.7.2-py3-none-any.whl (34 kB)

Collecting cachetools<5.0,>=2.0.0

  Using cached cachetools-4.2.2-py3-none-any.whl (11 kB)

Collecting pyasn1-modules>=0.2.1

  Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)

Collecting requests-oauthlib>=0.7.0

  Using cached requests_oauthlib-1.3.0-py2.py3-none-any.whl (23 kB)

Collecting pyasn1<0.5.0,>=0.4.6

  Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)

Collecting chardet<5,>=3.0.2

  Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB)

Collecting urllib3<1.27,>=1.21.1

  Using cached urllib3-1.26.5-py2.py3-none-any.whl (138 kB)

Collecting idna<3,>=2.5

  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)

Requirement already satisfied: certifi>=2017.4.17 in d:\miniconda3\envs\yolov5\lib\site-packages (from requests<3,>=2.21.0->tensorboard>=2.4.1->-r requirements.txt (line 15)) (2021.5.30)

Collecting oauthlib>=3.0.0

  Downloading oauthlib-3.1.1-py2.py3-none-any.whl (146 kB)

     |████████████████████████████████| 146 kB 6.4 MB/s

Installing collected packages: urllib3, pyasn1, idna, chardet, six, rsa, requests, pyasn1-modules, oauthlib, cachetools, typing-extensions, requests-oauthlib, pytz, python-dateutil, pyparsing, Pillow, numpy, kiwisolver, google-auth, cycler, werkzeug, torch, tensorboard-plugin-wit, tensorboard-data-server, scipy, protobuf, pandas, matplotlib, markdown, grpcio, google-auth-oauthlib, cython, absl-py, tqdm, torchvision, thop, tensorboard, seaborn, PyYAML, pycocotools, opencv-python

Successfully installed Pillow-8.2.0 PyYAML-5.4.1 absl-py-0.12.0 cachetools-4.2.2 chardet-4.0.0 cycler-0.10.0 cython-0.29.23 google-auth-1.30.1 google-auth-oauthlib-0.4.4 grpcio-1.38.0 idna-2.10 kiwisolver-1.3.1 markdown-3.3.4 matplotlib-3.4.2 numpy-1.20.3 oauthlib-3.1.1 opencv-python-4.5.2.52 pandas-1.2.4 protobuf-3.17.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pycocotools-2.0.2 pyparsing-2.4.7 python-dateutil-2.8.1 pytz-2021.1 requests-2.25.1 requests-oauthlib-1.3.0 rsa-4.7.2 scipy-1.6.3 seaborn-0.11.1 six-1.16.0 tensorboard-2.5.0 tensorboard-data-server-0.6.1 tensorboard-plugin-wit-1.8.0 thop-0.0.31.post2005241907 torch-1.8.1 torchvision-0.9.1 tqdm-4.61.0 typing-extensions-3.10.0.0 urllib3-1.26.5 werkzeug-2.0.1


インストールが終わったら動作確認をしてみます。

yolov5ではおなじみのヤツです。




> python detect.py --source .\data\images\zidane.jpg
Namespace(weights='yolov5s.pt', source='.\\data\\images\\zidane.jpg', img_size=640, conf_thres=0.25, iou_thres=0.45, max_det=1000, device='', view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='exp', exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False)
YOLOv5  2021-6-5 torch 1.8.1+cpu CPU

Fusing layers...
Model Summary: 224 layers, 7266973 parameters, 0 gradients
image 1/1 C:\Users\ユーザー名\yolov5\data\images\zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.156s)
Results saved to runs\detect\exp
Done. (0.189s)

結果を見てみましょうか。

yolov5\runs\detect の中にexpというフォルダが並びます。
今回はexpへ行けという指示でしたのでそこへ行くとyolov5の判定結果が保存されているはずです。




8.CPU利用環境からGPU利用環境へ移行する

先ほどの動作検証で、下記のメッセージが出ていました。
YOLOv5  2021-6-5 torch 1.8.1+cpu CPU

今の環境を調べる方法はこちらです。

> python
Python 3.9.5 (default, May 18 2021, 14:42:02) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
False
>>> exit()

cudaが動いていない(False)の状況です。
ここからGPUが動く環境に移行させます。

まず、CPUで動く Pytorchを削除します。
下記のコマンドを入力します。

> pip uninstall torch
> pip uninstall torchvision

次にPytorchのサイトへ行きます。
https://pytorch.org/

Installボタンをクリック(またはGet Starttedタブをクリック)するとページ遷移し、START LOCALLYのページが表示されます。
ここで、
PyTorch Build:Stable1.8.1
Your OS:Windows
Pakage:Conda
Language:Python
Computer Platform:CUDA11.1

を選択するとコマンドが表示されます。
Run this Command:
conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c conda-forge

これをコピーし、Anaconda Powershell Promptで実行(もちろん指定の仮想環境で)。インストールが終わったらGPUが使用できるようになったか確認してみましょうか。

> python
Python 3.9.5 (default, May 18 2021, 14:42:02) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True

True表示が出たのでめでたくGPUが利用できる環境が手に入りました。
続けて下記を入力してみます。

>>> print(torch.cuda.get_device_name(0))
NVIDIA GeForce RTX 2060

GPUボード名も表示されたので環境は完成した模様。

CPU環境でも試したzidane.jpgの判定をやってみました。

> python detect.py --source .\data\images\zidane.jpg
Namespace(weights='yolov5s.pt', source='.\\data\\images\\zidane.jpg', img_size=640, conf_thres=0.25, iou_thres=0.45, max_det=1000, device='', view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='exp', exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False)
YOLOv5  2021-6-5 torch 1.8.1 CUDA:0 (NVIDIA GeForce RTX 2060, 6144.0MB)

Fusing layers...
Model Summary: 224 layers, 7266973 parameters, 0 gradients
image 1/1 C:\Users\ユーザー名\yolov5\data\images\zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.022s)
Results saved to runs\detect\exp
Done. (0.057s)

0.189s → 0.057sですので約30%程度の時間で判定が終わった計算になります。
速いな。。。

下記コマンドでWebカメラからの映像を判別できます。
> python detect.py --source 0

CPUだとカクカクした処理がGPU環境になるとヌルヌル動くのが感動的です。

ケータイプランをどうしようか。。。

 3月からahamoを始めとして各社の新プランが始まります。

で、僕もahamoに魅かれたんですよ。

なんといっても「5分間電話かけ放題」「パケットを海外でも利用可能」がとにかく魅力的。海外旅行先の空港で、まず最初にやる仕事「現地のsimカードを買うこと」から解放されなんてTrès bien!!


なんだけど、国内での僕のパケット消費量は微々たるもの。

自宅はnuroでハイスピードのWiFi環境が構築されてるし、屋外では動画見ないしね。

3GBを使い残すこともしばしば。

なので、前月使い残したパケットを繰り越しができるUQmobileで十分だったのです。


で、最近やっていることといえば、M1 Macminiをホームサーバにして、pythonプログラムを作って遊ぶこと。

カフェにノートPC(これはSurface Laptop3)を持って行って、sshでM1 Macminiにリモート接続してプログラムを書く。


Visual Studio Codeが最高すぎる~!!


リモートサーバ側にあるプログラムコードを書き換えるならばターミナルを立ち上げてvimあたりを使うことになるのでしょうが、自分にはちょっと使い難く。

atomエディタで直接サーバ側のファイルをいじれれば良いのですが、ftpを使うなどちょっと煩雑な感じがした。


ところがですね。

Visual Studio Codeだとsshターミナル機能を内蔵しているのです。

なのですでに.ssh/configで設定してあるリモート接続設定を拾ってきてくれてシレっと接続。

リモートサーバ側のファイルを開いて、あたかもローカルで編集しているように作業できるのが最高!


で、話はQUmobileに戻るわけですが。

QUmobileは「パケット繰り越し」以外に「高速・節約モードの切り替え」ができるという特長があります。「高速モード」は契約パケット容量から消費されるのですが、「節約モード」は低速(僕の契約だと300kbps)ながら無制限の通信が可能。

で、いま現在spotifyを聴きながらVisual Studio Codeでプログラムの編集をしつつ、時々コンソールでプログラムを動作させていますが、「まあまあ行けんじゃね!?」という感触です。


もっかい言うよ。

Visual Studio Codeが最高すぎる~!!


とりあえず、不満が出るまではUQmobileにいようと思います。

Anaconda3をPowershellから使用するTips

自分用メモ。

とにかくActivationが通らない。
Pythonを立ち上げると、必ず下記警告が出てしまう。

Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activation.

これを解消するには、Powershellから次のコマンドを実行する。

> conda init powershell

これで良いようだ。

で、続きを。
これをやってしまうと、PowerShellを立ち上げるたびにconda環境になってしまうそう。
解消方法はこちらだと。

profile.ps1というファイルを探す。

これが変更前の内容。
#region conda initialize
# !! Contents within this block are managed by 'conda init' !!
(& "c:\Users\user\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | Invoke-Expression
#endregion

これを下記のように変更。
#region conda initialize
Function condaini{
  (& "c:\Users\user\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | Invoke-Expression
}
#endregion

修正を終えたら保存する。

PowerShellでconda環境に入りたくなったときは、
> condaini

を入力する。

参考サイトはこちら。
本当に助かりました。ありがとうございました。

Anaconda がやっと PowerShell に公式対応した
https://qiita.com/yniji/items/668f805a72a6ced6a2bd

リモートサーバ側でJupyter notebookを起動して使う場合

個別の端末に開発環境を整えるのもありなんだが、サーバ側でjupyter notebookを起動させると、開発ファイルなんかもサーバ側に置けて便利だ。
もっとも、便利な分いつもネットワーク環境が必要となるんだけどね。

じゃリモートからJupyter notebookを使うための設定は次の通り。

まずリモートサーバ側のhome/ユーザディレクトリで、下記のコマンドを実行する。

$ jupyter notebook --generate-config
Writing default config to: /home/hogehoge/.jupyter/jupyter_notebook_config.py


次にパスワードのハッシュ値を計算する。

$ ipython
Python 3.6.5 (default, May 23 2018, 19:51:39)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from IPython.lib import passwd

In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:パスワードのハッシュ値'

Jupyter notebookの設定ファイルを編集する。

$ cd .jupyter
$ sudo vi jupyter_notebook_config.py

ファイルの最終行に下記を追加。

# 追加部分
c.IPKernelApp.pylab = 'inline'
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 9999
c.NotebookApp.password = u'sha1:パスワードのハッシュ値'

保存してファイル編集を終了する

じゃ、動作確認をしてみる。
リモートサーバ側で下記のコマンドを打ってみよう。

$ jupyter notebook &
[1] 2309
$ [W 20:35:35.035 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 20:35:35.035 NotebookApp] The port 9999 is already in use, trying another port.
[I 20:35:35.043 NotebookApp] Serving notebooks from local directory: /home/hogehoge
[I 20:35:35.043 NotebookApp] 0 active kernels
[I 20:35:35.043 NotebookApp] The Jupyter Notebook is running at:
[I 20:35:35.043 NotebookApp] http://サーバ名:10000/
[I 20:35:35.043 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

手元の端末のブラウザを立ち上げ、http://サーバのIPアドレス:9999 でアクセスしてみる。
パスワードを入力する認証ページが立ち上がったら、設定は成功だ!

Python3にOpenCVをインストールする

それじゃOpebCVから。

$ sudo pip install opencv-python
Successfully installed numpy-1.14.3 opencv-python-3.4.1.15

まずはインストール成功。

次に拡張モジュール群のOpenCV contribをインストール。

$ sudo pip install opencv-contrib-python
Successfully installed opencv-contrib-python-3.4.1.15

インストール成功。

必要なものを次々インストール。

$ sudo pip install matplotlib
Successfully installed cycler-0.10.0 kiwisolver-1.0.1 matplotlib-2.2.2 pyparsing-2.2.0 python-dateutil-2.7.3 pytz-2018.4 six-1.11.0

$ sudo pip install scipy
Successfully installed scipy-1.1.0

$ sudo pip install ipython pyreadline
Successfully installed backcall-0.1.0 decorator-4.3.0 ipython-6.4.0 ipython-genutils-0.2.0 jedi-0.12.0 parso-0.2.1 pexpect-4.5.0 pickleshare-0.7.4 prompt-toolkit-1.0.15 ptyprocess-0.5.2 pygments-2.2.0 pyreadline-2.1 simplegeneric-0.8.1 traitlets-4.3.2 wcwidth-0.1.7

$ sudo pip install jupyter
Successfully installed MarkupSafe-1.0 Send2Trash-1.5.0 bleach-2.1.3 entrypoints-0.2.3 html5lib-1.0.1 ipykernel-4.8.2 ipywidgets-7.2.1 jinja2-2.10 jsonschema-2.6.0 jupyter-1.0.0 jupyter-client-5.2.3 jupyter-console-5.2.0 jupyter-core-4.4.0 mistune-0.8.3 nbconvert-5.3.1 nbformat-4.4.0 notebook-5.5.0 pandocfilters-1.4.2 pyzmq-17.0.0 qtconsole-4.3.1 terminado-0.8.1 testpath-0.3.1 tornado-5.0.2 webencodings-0.5.1 widgetsnbextension-3.2.1

正常に動くかテスト。

$ ipython
Python 3.6.5 (default, May 23 2018, 19:51:39)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import cv2

In [2]: cv2.__version__
Out[2]: '3.4.1'


ちゃんと動いてるね。

Ubuntu18.04にPyenvでPython3がインストールできない件

まさにタイトル通りのトラブル。
なんで出来ないんだろうね?!

$ sudo pyenv install 3.6.5
Downloading Python-3.6.5.tar.xz...
-> https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
Installing Python-3.6.5...

BUILD FAILED (Ubuntu 18.04 using python-build 1.2.4-2-gdad0fc7)

Inspect or clean up the working tree at /tmp/python-build.20180523192934.2619
Results logged to /tmp/python-build.20180523192934.2619.log

Last 10 log lines:
    sys.exit(ensurepip._main())
  File "/tmp/python-build.20180523192934.2619/Python-3.6.5/Lib/ensurepip/__init__.py", line 204, in _main
    default_pip=args.default_pip,
  File "/tmp/python-build.20180523192934.2619/Python-3.6.5/Lib/ensurepip/__init__.py", line 117, in _bootstrap
    return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/tmp/python-build.20180523192934.2619/Python-3.6.5/Lib/ensurepip/__init__.py", line 27, in _run_pip
    import pip
zipimport.ZipImportError: can't decompress data; zlib not available
Makefile:1099: recipe for target 'install' failed
make: *** [install] Error 1


このエラーをどうするのか…………。

原因はこれらしい。

Hi, look at #945, it's because Debian 9 uses OpenSSL 1.1.0 which support in CPython was added in 3.5.3 (more details in the issue above). Cheers
https://github.com/pyenv/pyenv/issues/950#issuecomment-325500154

ウチのUbuntuサーバの状態はどうなのか?

$ openssl version
OpenSSL 1.1.0g  2 Nov 2017

はぁ……ダメじゃん orz

解決方法はこれだそうだ。

$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev

で、その後に再度Python3.6.5のインストールをやってみる。

$ sudo pyenv install 3.6.5
Downloading Python-3.6.5.tar.xz...
-> https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
Installing Python-3.6.5...
Installed Python-3.6.5 to /usr/local/pyenv/versions/3.6.5

なんかインストールされたっぽい。
確認してみようか。

$ pyenv versions
  3.6.5

インストールされてるね。
それじゃデフォルトインタプリタに指定しましょか。

$ sudo pyenv global 3.6.5
$ pyenv versions
* 3.6.5 (set by /usr/local/pyenv/version)

ん。
ちゃんと3.6.5がデフォルトになってるね。

High SierraにアップデートされたMacでHomebrewがうまく動かない

brew updateが動かず、ほんと泣きそうになった。
理由はよく分からないが、ネット情報ではHomebrewを再インストールしろと。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

で色々とダウンロードがあり、xcodeが再インストールされたりで、Homebrewも最新版が導入される。

$ brew update
Already up-to-date.

確かに、アップデートされてる。
助かった。

Python3.6とParamikoの組み合わせでエラーが出た

秘密鍵認証方式でPythonからSSH接続してみようと試みていた。
使ったライブラリーはParamiko。
サンプルコードを少し改変しても、認証のところでこんなエラーが出てお手上げ。

TypeError: from_buffer() cannot return the address of the raw string within a bytes or unicode or bytearray object

Paramikoの掲示板を調べていたら解消方法を発見。
https://github.com/paramiko/paramiko/issues/1027

Just do a

pip install paramiko -U
pip install netmiko -U

やってみた。
エラーが出なくなった。