はじまる

適当な事を適当に書く

AWS CLI で利用する Python を変更する

動機

aws cli をアップデートしたら動かなくなってしまった(確か)

経緯はうろ覚えだけど、動かなくなってしまった。バタバタしてて放置してたんだけど、さすがに必要になったので、対応する

~ ❯ python --version
Python 2.7.15
~ ❯ which python
/usr/local/bin/python
~ ❯ aws
zsh: /usr/local/bin/aws: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory
~ ❯

aws コマンドがみにいくpython の場所を変えられればいいのだが。

ちなみにマシンはだいたいこんな感じ

~ ❯ uname -rsvp
Darwin 17.5.0 Darwin Kernel Version 17.5.0: Mon Mar  5 22:24:32 PST 2018; root:xnu-4570.51.1~1/RELEASE_X86_64 i386

そもそも AWS CLI どうやってインストールしたんだっけ

aws cli は pip でインストールしたように記憶している。確認したら pip (python2系の方)だった。

~ ❯ pip list|grep aws
awscli                        1.16.43

pip3 にはいない

~ ❯ pip3 list
Package    Version
---------- -------
nose       1.3.7
numpy      1.15.2
pip        18.0
setuptools 40.4.3
wheel      0.32.0

python は homebrew でインストールしていたやつのようだ

~ ❯ ls -al /usr/local/bin/python
lrwxr-xr-x  1 ore  admin  38 10 22 14:49 /usr/local/bin/python -> ../Cellar/python@2/2.7.15_1/bin/python

なんか2個ある。python が3系で python@2 が2系の様子。

~ ❯ brew list |grep python
python
python@2

AWS CLI で利用する Python を変更する

普通にアンインストールする

アンインストールしてインストールしなおしちゃえ

~ ❯ pip uninstall awscli
Uninstalling awscli-1.16.43:
  Would remove:
    /Users/ore/Library/Python/2.7/bin/aws
    /Users/ore/Library/Python/2.7/bin/aws.cmd
    /Users/ore/Library/Python/2.7/bin/aws_bash_completer
    /Users/ore/Library/Python/2.7/bin/aws_completer
    /Users/ore/Library/Python/2.7/bin/aws_zsh_completer.sh
    /Users/ore/Library/Python/2.7/lib/python/site-packages/awscli-1.16.43.dist-info/*
    /Users/ore/Library/Python/2.7/lib/python/site-packages/awscli/*
Proceed (y/n)? y
  Successfully uninstalled awscli-1.16.43

/Users/ore/Library/Python/2.7/bin/ のしたは消えたけど、bin のしたは残ったまま

~ ❯ which aws
/usr/local/bin/aws
~ ❯ aws
zsh: /usr/local/bin/aws: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory

お前は誰なんだ

~ ❯ ls /usr/local/opt/python
Frameworks            INSTALL_RECEIPT.json  Python Launcher 3.app bin                   libexec
IDLE 3.app            LICENSE               README.rst            lib                   share
~ ❯ cd bin
bin ❯ ls
digdag pack
bin ❯

お前は誰なんだ2

bin ❯ ll /usr/local/bin/|grep aws
-rwxr-xr-x    1 ore  admin       834  6 18 14:06 aws
-rwxr-xr-x    1 ore  admin      1432  6 18 14:06 aws.cmd
-rwxr-xr-x    1 ore  admin       204  6 18 14:06 aws_bash_completer
-rwxr-xr-x    1 ore  admin      1155  6 18 14:06 aws_completer
-rwxr-xr-x    1 ore  admin      1807  6 18 14:06 aws_zsh_completer.sh

おりゃー!

bin ❯ sudo rm /usr/local/bin/aws*
Password:
bin ❯ ll /usr/local/bin/|grep aws
bin ❯ aws
zsh: command not found: aws
bin ❯

AWS CLI を再インストール

macOS で AWS Command Line Interface をインストールする - AWS Command Line Interface 上記をみながら再インストール。前回は pip 経由でインストールしたようだが(あまり覚えていない)、今回はバンドルインストーラ(昔はなかった)でインストールしたい。リンク先はpyhton3推奨のような書き方になっているが、自分が python は2系を利用したいので、そこだけ変更する。といっても、/usr/local/bin/pythonが2系を向いているので、awsコマンドがちゃんとそこを参照できるようになればいいだけ。

とりあえずダウンロード&解凍

~ ❯ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10.5M  100 10.5M    0     0   320k      0  0:00:33  0:00:33 --:--:--  628k
~ ❯ unzip awscli-bundle.zip
Archive:  awscli-bundle.zip
  inflating: awscli-bundle/install
  inflating: awscli-bundle/packages/docutils-0.14.tar.gz
  inflating: awscli-bundle/packages/python-dateutil-2.6.1.tar.gz
  inflating: awscli-bundle/packages/awscli-1.16.57.tar.gz
  inflating: awscli-bundle/packages/urllib3-1.24.1.tar.gz
  inflating: awscli-bundle/packages/jmespath-0.9.3.tar.gz
  inflating: awscli-bundle/packages/argparse-1.2.1.tar.gz
  inflating: awscli-bundle/packages/ordereddict-1.1.tar.gz
  inflating: awscli-bundle/packages/six-1.11.0.tar.gz
  inflating: awscli-bundle/packages/simplejson-3.3.0.tar.gz
  inflating: awscli-bundle/packages/colorama-0.3.9.tar.gz
  inflating: awscli-bundle/packages/python-dateutil-2.7.5.tar.gz
  inflating: awscli-bundle/packages/virtualenv-15.1.0.tar.gz
  inflating: awscli-bundle/packages/futures-3.2.0.tar.gz
  inflating: awscli-bundle/packages/s3transfer-0.1.13.tar.gz
  inflating: awscli-bundle/packages/urllib3-1.22.tar.gz
  inflating: awscli-bundle/packages/rsa-3.4.2.tar.gz
  inflating: awscli-bundle/packages/PyYAML-3.13.tar.gz
  inflating: awscli-bundle/packages/botocore-1.12.47.tar.gz
  inflating: awscli-bundle/packages/pyasn1-0.4.4.tar.gz
  inflating: awscli-bundle/packages/setup/setuptools_scm-1.15.7.tar.gz

いけー

~ ❯ sudo /usr/local/bin/python awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
Password:
Running cmd: /usr/local/opt/python@2/bin/python2.7 virtualenv.py --no-download --python /usr/local/opt/python@2/bin/python2.7 /usr/local/aws
Running cmd: /usr/local/aws/bin/pip install --no-cache-dir --no-index --find-links file:///Users/ore/awscli-bundle/packages/setup setuptools_scm-1.15.7.tar.gz
Running cmd: /usr/local/aws/bin/pip install --no-cache-dir --no-index --find-links file:///Users/ore/awscli-bundle/packages awscli-1.16.57.tar.gz
You can now run: /usr/local/bin/aws --version

えいっ

~ ❯ aws --version
aws-cli/1.16.57 Python/2.7.15 Darwin/17.5.0 botocore/1.12.47

なおったーよかったー。ちなみに、AWS CLI が利用するpyhtonは、AWS CLI のインストール時に指定するので(作用際はリンク先のAWSの記事参照)、アンインストール&再インストールが正解。

注記

デフォルトでは、インストールスクリプトはシステムのデフォルトバージョンの Python で実行されます。別のバージョンの Python がインストールされており、それを使用して AWS CLI をインストールする場合は、Python の実行可能ファイルへの絶対パスを指定してそのバージョンでインストールスクリプトを実行します。以下に例を示します。

$ sudo /usr/local/bin/python2.7 awscli-bundle/install -i /usr/local/aws -b /usr/local/b

Node-RED node-red-contrib-opencv インストールエラー

結論

node-red-contrib-opencv が依存しているライブラリ node-opencv が対応してない環境ではエラーになります。どうしようもないです。 (2019年1月4日更新)ライブラリ内部でOpenCVのバイナリを持たない設計になったので、この記事に記載したエラーは解消されたようです。

以降、調査の経緯

admin tab からインストールを試みた場合

22 Oct 15:12:54 - [info] モジュールnode-red-contrib-opencv, バージョン: latestをインスートールします
22 Oct 15:13:29 - [warn] モジュール node-red-contrib-opencv のインストールに失敗しました:
22 Oct 15:13:29 - [warn] ------------------------------------------
22 Oct 15:13:29 - [warn]
> opencv@6.0.0 install /Users/me/.node-red/node_modules/opencv
> node-pre-gyp install --fallback-to-build

node-pre-gyp ERR! Tried to download(403): https://node-opencv.s3.amazonaws.com/opencv/v6.0.0/Release/node-v57-darwin-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for opencv@6.0.0 and node@8.12.0 (node-v57 ABI, unknown) (falling back to source compile with node-gyp)
(以下略)

コマンドの場合

.node-red ❯ npm install node-red-contrib-opencv

> opencv@6.0.0 install /Users/me/.node-red/node_modules/opencv
> node-pre-gyp install --fallback-to-build

node-pre-gyp ERR! Tried to download(403): https://node-opencv.s3.amazonaws.com/opencv/v6.0.0/Release/node-v57-darwin-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for opencv@6.0.0 and node@8.12.0 (node-v57 ABI, unknown) (falling back to source compile with node-gyp)
(以下略)

gyazo.com

あなたどこにいるの...

というかダウンロード元はこっちじゃない?

Releases · peterbraden/node-opencv · GitHub

https://github.com/peterbraden/node-opencv/archive/v6.0.0.tar.gz

node-red-contrib-opencv をみる

https://github.com/zuhito/node-red-contrib-opencv/blob/master/package.jsondependenciesopencv がある。

{
  "name": "node-red-contrib-opencv",
  "version": "0.1.2",
  "description": "Node-RED node for OpenCV",
  "main": "node.js",
  "node-red" : {
    "nodes": {
      "opencv": "node.js"
    }
  },
  "dependencies": {
    "opencv": "*"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/zuhito/node-red-contrib-opencv.git"
  },
  "keywords": [
    "node-red",
    "opencv",
    "image recognition",
    "computer vision"
  ],
  "author": "zuhito",
  "license": "Apache-2.0",
  "bugs": {
    "url": "https://github.com/zuhito/node-red-contrib-opencv/issues"
  },
  "homepage": "https://github.com/zuhito/node-red-contrib-opencv#readme"
}

node-opencv をみる

そもそも npm install opencv でコケる

.node-red ❯ npm install opencv

> opencv@6.0.0 install /Users/me/.node-red/node_modules/opencv
> node-pre-gyp install --fallback-to-build

node-pre-gyp ERR! Tried to download(403): https://node-opencv.s3.amazonaws.com/opencv/v6.0.0/Release/node-v57-darwin-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for opencv@6.0.0 and node@8.12.0 (node-v57 ABI, unknown) (falling back to source compile with node-gyp)

https://github.com/peterbraden/node-opencv/blob/master/package.json#L41

node-opencvpackage.jsonをみてみる。バイナリのダウンロード先は動的に生成しているので、ダウンロード先環境に対応しているバイナリがホストされていないとダメ。

"binary": {
    "module_name": "opencv",
    "module_path": "./build/{module_name}/v{version}/{configuration}/{node_abi}-{platform}-{arch}/",
    "remote_path": "./{module_name}/v{version}/{configuration}/",
    "package_name": "{node_abi}-{platform}-{arch}.tar.gz",
    "host": "https://node-opencv.s3.amazonaws.com"
  }

---------- 終了 -----------

Gitbook で PDF を生成するときにつかう、ebook-convert コマンドのありか

目的

gitbook プロジェクトからPDFを生成したい。

困りごと

下記のコマンドを実行すればいいだけだが、エラーになる。

$gitbook pdf
(中略)

InstallRequiredError: "ebook-convert" is not installed.
Install it from Calibre: https://calibre-ebook.com

エラーメッセージで検索すると「Calibre.app をインストールすれば大丈夫だよ」と書かれたブログ記事が大量にでてくる。が、実は Calibre.app はインストール済みなのである。gitbook pdfコマンドのなかで利用するebook-convertコマンドは、Calibre.app のなかに格納されているが、(当たり前だけど)app をインストールしただけでは、当該コマンドへのpathが通らないので、実行できないのだ。

対処法

1.調査

path を通したいけど、そもそも当該コマンドはどこにあるんや。調べてみたら、結構えぐいとこにあった。

https://manual.calibre-ebook.com/generated/en/cli-index.html

Note On macOS, the command line tools are inside the calibre bundle, for example, if you installed calibre in /Applications the command line tools are in /Applications/calibre.app/Contents/console.app/Contents/MacOS/.

つまりシェルから /Applications/calibre.app/Contents/console.app/Contents/MacOS にアクセス可能になればいい。

2.対処

.bashrc.zshrc

export PATH=$PATH:/Applications/calibre.app/Contents/console.app/Contents/MacOS

と追記して読み込ませれば、PATHが通る。

もしくは既にPATHの通っている場所にリンクを作成するのも良い

sudo ln -s ~//Applications/calibre.app/Contents/console.app/Contents/MacOS/ebook-convert /usr/bin

3.結果

~ ❯ ebook-convert
使用法: ebook-convert 電子書籍のフォーマットを変換します。

出力する電子書籍のフォーマットは、出力ファイルの拡張子から推測されます。出力ファイルの拡張子をEXTとして、output_file は特別な形式 .EXT と指定することも可能です。この場合、出力ファイル名の本体部分は、入力ファイル名のものが使用されます。ファイル名の先頭にハイフンは使えませんので注意してください。output_file に拡張子をつけなかった場合、出力ファイル名はディレクトリとして見なされ、HTMLファイルで構成されれる "open ebook" (OEB) フォーマットで、指定したディレクトリに出力されます。

入力ファイルと出力ファイルを指定した後ろに、変換をカスタマイズするための様々なオプションを指定することができます。使用可能なオプションは、入出力のファイルタイプに依存します。使用可能なオプションとその使い方を見るためには、入出力のファイルを指定した後ろに、-h オプションを指定してください。

電子書籍変換システムについての完全なドキュメントは下記を参照してください
https://manual.calibre-ebook.com/conversion.html

スペースを含む引数を ebook-convert に渡す場合には、クォーテーションマークでくくってください。例: "/some path/with spaces"

オプション:
  --version       プログラムのバージョン番号を表示して終了

  -h, --help      このヘルプメッセージを表示して終了

  --list-recipes  ビルトイン・レシピ名の一覧を表示。以下のようにしてビルトイン・レシピから電子書籍を作成できます。: ebook-
                  convert "Recipe Name.recipe" output.epub


開発者: Kovid Goyal <kovid@kovidgoyal.net>
~ ❯ which ebook-convert
/Applications/calibre.app/Contents/console.app/Contents/MacOS/ebook-convert

髭剃りのベストプラクティス

‪袋売りの剃刀をまとめて買って、1ヶ月に1本ずつ使っていくのがベストプラクティスな気がして来た‬

シック Schick プロテクター ディスポ 使い捨て (10本入)

シック Schick プロテクター ディスポ 使い捨て (10本入)

こういうやつ。