20210118のMacに関する記事は5件です。

M1 Mac Homebrew,Tensorflow,keras,pillow,...etc導入

M1搭載Macにて現時点で躓いてきた点がいくつもあったので一応残す(長くなりそう)

目次

①:TensorFlow macos導入時に公式からpythonダウンロードしていて厄介なことになった
②:pipが効かない(homebrew)
③:Kerasがimportできない(解決したが何かと曖昧)
④:Pillowがimportできない(matplotlibがinstallできない)

順番にどう解決していったかリアルを載せます


①:TensorFlow macos導入時に公式からpythonダウンロードしていて厄介なことになった

これに関しては、すでに記事にしているので以下の記事参考ください
↓↓
https://qiita.com/inosuke-hashibira/items/0d0e50d4e49fc2f78b42
(ざっくり言うと、余分なpythonの消し方です)


②:pipが効かない(homebrew)

これに関してもすでに記事にしているので以下を参考ください
↓↓
https://qiita.com/inosuke-hashibira/items/ba7e0e5579f66389f8d7


③:Kerasがimportできない(from tensorflow import keras)

(環境python3.8.2)
これがかなり曖昧。
自分がこれに引っかかっていた状況としては、
https://qiita.com/tomoyaeibu/items/46f2f3384a370df71d5e
 上記の記事にて、TensorFlow macosインストール済み(仮想環境も構築)
・②にて、ターミナルをRosettaを使用して開く設定になっている

やったこと
1.ターミナルを「Rosetta使用して開く」を解除
2.①の時と同じやり方、同じインストール先でもう一度TensorFlow macos入れる
  (binフォルダが更新される)※下記コードが①記事と同じコードです

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)"

3.brewでpython3.9インストール(関係ないはず)
 結局3.8.2使用してるし関係ないはず...homebrew updataみたいな文言が出たからもしかしたら...
4.reboot(再起動)

以上の4つがやったことです
Rosettaは最初に外し、2のをやって念の為3をやって、これまた念の為4をやって,ダメでまた2をやったら
みたいに半ばヤケクソにやってたらできました。笑
わかる方、いたらコメントください。笑


④Pillowがimport出来ない(matplotlibがインストールできない)

pip3 install matplotlib

(上記によりpillow8.1.0が一緒に入ります)
で上手くいかないといった記事をよく見かけましたが自分は問題なく行きました
しかし、
from PIL import Image
でエラーを吐きました(libjpegと言うものが必要)
そこで行うのが以下のコマンドです

brew install libjpeg

確認で

brew list

でjpegがあれば正常にインストールできて
from PIL import Image これも上手くいくと思います

おそらく、pip3 instal matplotlib が失敗した人もこれで解決するかな。多分

ちなみに

brew installの時は、ターミナルを、Rosettaを使用して開いていて

pip installの時は、Rosetta解除してます

何か解決できないことや
事細かにわかったことがあれば教えて下さい

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac(M1)TensorFlow導入(自分でpythonを入れてしまった人におすすめ)

この記事自体は、
1ヶ月程前に書き上げました
そこから、この後Keras、Pillowで躓きそれを回避したので
その記事のURL載せておきます
https://qiita.com/inosuke-hashibira/items/b660d895d45455689143

概要

とある記事を参考にTensorflow導入開始
しかし、AnacondaやPython公式からpythonをインストールすると
かなり躓くことがわかったので実際に回避したやり方を残す

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
回避方法に移る前にぶつかったエラーとしては
pip3 list で確認するとTensorFlow-macos は存在するが
import tensorflowをすると No module となる 
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ちなみに以下が「とある記事」になる
https://qiita.com/tomoyaeibu/items/46f2f3384a370df71d5e
特に個別でインストールしていなければ、上の記事だけでTensorFlow導入可能です

環境

M1 MacBook Pro

エラーの原因(推測)

そもそも,エラーの原因がプロンプトで

which python3 

とした時に出力が

/usr/bin/python3

とならないこと。
ちなみに不具合時の出力は

/Library/Frameworks/Python.framework/Versions/3.7/bin/python3

だった。使用してるpythonが違う?(素人に詳細はわからん...)

じゃあ、/Library/Frameworks/Python.framework/Versions/3.7/bin/python3
これを消せばいいか?ってなった

以下、やったこと(2パターン)

その1 ファイルをコマンドや手探りで削除する

以下、記事参照
https://code-graffiti.com/how-to-uninstall-official-python3-on-mac/

bash_profileの部分はやらなくていいです
(bash_profile1が見つからなかった)

その2 Mac初期化(その1がだめだった時の最終手段)

以下、記事参照
https://www.sin-space.com/entry/m1mac-recovery

参照記事内で実際にやったことを以下に記す(参照記事と見比べながら見るとわかる)
1.再起動
2.R + Command +電源ボタンを押しながら起動を待つ(M1でもこれでやった)
3.左上の復旧アシスタントからMacを消去を選択
4.従って、消去実行
5.「ターミナルからmacos復元する」のストレージの初期化が完了したら...という文章から従ってやった
6.あとは従って進めていくだけです

全て完了したら、一番上に載せた記事を参考にTensorFlowを導入して下さい

もっと楽な方法ないかな...

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macOSでopensslコマンド打つとエラーになる

macで openssl コマンド使うとエラーになった。

% openssl x509 -in test.crt -text -noout
unable to load certificate
...

一応バージョンは
macOS Catalina 10.15.7

他のバージョンで発生するかは不明。

brewで入れてみる。

% brew install openssl
Updating Homebrew...

・
・
・

Error: Failed to link all completions, docs and manpages:
  Permission denied @ dir_s_mkdir - /usr/local/share/fish
Error: The following directories are not writable by your user:
/usr/local/lib/pkgconfig
/usr/local/share
/usr/local/share/man
/usr/local/share/man/man1

You should change the ownership of these directories to your user.
  sudo chown -R $(whoami) /usr/local/lib/pkgconfig /usr/local/share /usr/local/share/man /usr/local/share/man/man1

And make sure that your user has write permission.
  chmod u+w /usr/local/lib/pkgconfig /usr/local/share /usr/local/share/man /usr/local/share/man/man1

なんかエラーが出たので言われたとおり実行。

% sudo chown -R $(whoami) /usr/local/lib/pkgconfig /usr/local/share /usr/local/share/man /usr/local/share/man/man1
Password:

% chmod u+w /usr/local/lib/pkgconfig /usr/local/share /usr/local/share/man /usr/local/share/man/man1

で、brew で openssl が入った。

が解消しない。

% which openssl
/usr/bin/openssl

これは brew で入ったものではない。

% brew link openssl
Warning: Refusing to link macOS provided/shadowed software: openssl@1.1
If you need to have openssl@1.1 first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

言われた通り、

% echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

でターミナル新しく起動するとコマンドが通った。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac】grepとsedで単語として完全一致を行う正規表現

  • 業務等でgrepやsedを利用する際に、単語一致での検索や置換処理は非常に多いです。
  • その際に完全一致とならないケースは稀では無いです。
  • 今回は、限りなく高い確率で完全一致で行うための正規表現記法を記録します。

結果

  • 結果の記述は以下の通りです。
    • ※なおMacのBSD系のgrep及びsedで動作するものとなっています。
# データ例
$ cat data

10,30,50,100,150,250,300,500

# データ例の中から50のみをgrep。
$ cat data | grep -o '[[:<:]]50[[:>:]]'

50

# データ例の中から50のみを"一致"へ置換。
$ cat data.txt | sed 's;[[:<:]]50[[:>:]];一致;g'

10,30,一致,100,150,250,300,500

内容

  • 上記の結果例は、任意のデータに対して検索及び置換を行う処理です。
  • こちらで利用している方法は、どちらも単語を[[:<:]]単語[[:>:]]のように囲むということです

grepでの単語指定

  • そもそもgrepは単語のみではなく、行の抽出を行います。
  • 単語のみの抽出には、optionを利用して、grep -o 単語とします。
  • ただ上記のデータ例では以下のように部分一致となり、4つ抽出されます。
$ cat data | grep -o 50

50
50
50
50
  • これらの事から以下の意味がある[[:<:]]単語[[:>:]]を利用します。
    • 単語の先頭及び末尾に一致するため、前後への文字列を認識しない。

sedでの単語指定

  • sedもgrep同様にそのまま置換文字列指定では、以下のように4つ置換されます。
$ cat data.txt | sed 's;50;一致;g'

10,30,一致,100,1一致,2一致,300,一致0
  • これらの事からgrep同様に[[:<:]]単語[[:>:]]のように単語として認識させる必要があります。

まとめ

  • 上記のことから、データの重複性を意識して更なる正規表現の勉強を再認識しました。

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

emacsclientでGUIのEmacsを高速で使いたい (Mac)

Macで。

emacs --daemonとか、start-serverとかいろいろあるのですが、
ターミナルでemacsclientコマンドを使って接続しようとしても、
ターミナル(CUI)のemacsにつながっちゃって。

alias e 'emacsclient -nw -a ""'
alias ee 'emacsclient -n -c -a ""'

この辺りはやってるんですけど。

前はうまくいってたし。なんだろう。。。

→ 導入するEmacsの違いでした。

https://github.com/railwaycat/homebrew-emacsmacport/issues/52

インラインパッチ版使いたくて、emacsmacport版使ってたのが理由だったとは。
謎が解けてすっきり。

インラインパッチ版使ってみて感激したけど、
emacsclientの方が優先なので、泣く泣く入れ替え。

こっち気になるなー。

https://github.com/takaxp/ns-inline-patch

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む