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

macでzshのプロンプトを作ろうとしたら背景色と三角の色が異なった

こちらを参考にプロンプトを作ったが、うまくいかない for c in {000..255}; do echo -n "\e[48;5;${c}m\e[38;5;255m$c\e[0m\e[38;5;${c}m\uE0B0" ; [ $(($c%16)) -eq 15 ] && echo;done;echo これを実行すると色が違うことがわかった。 解決策がわからないため、誤差が少ないものをこの出力から使うことにする。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1 macな人たちに贈るpytorch+jupyterlab docker image

はじめに PCを変えるたびに開発環境やらtex環境やらを構築するのが面倒なので、当方はなるべくdockerイメージを使って環境構築するようにしています。 pythonを使うときは多くの場合にデータ分析やら機械学習を行うので、docker hubにあるpytorchイメージにjupyterlabやらscikit-learnやらを導入したイメージを使っていました。しかし、大変残念なことに、docker hubにあるpytorchイメージはlinux/amd64版のみが提供されており、linux/arm64(aarch64)なM1 mac民は使うことができません。 M1 macではまだnvidia GPUが使えないことから、心機一転してCPU実行のみをサポートする小さめのイメージを作成しました。 検証環境 Docker version 20.10.2, build 2291f61 running on Ubuntu 18.04.05 LTS x86_64 Docker version 20.10.7, build f0df350 running on macOS 10.15.7 x86_64 Docker version 20.10.7, build f0df350 running on macOS 11.4 aarch64 使い方 拙作のpytorch+jupyterlabをpullして実行してください。 latestタグのイメージを作っていないため、利用可能なタグを確認して実行してください。 CPUしか使わない人 本記事執筆時点ではpytorchはversion 1.9.0が最新です。ですので、以下のように実行します。 初回実行時に自動的にpullされると思います。 % docker run --rm -d -v $PWD:/app -p 8888:8888 \ pman0214/pytorch_jupyterlab:1.9.0 あとはブラウザでhttp://localhost:8888にアクセスすればjupyterlabが使えます。 jupyterlabのパスワードはjupyterとしてあります。 GPUも使う人 linux/amd64な環境でnvidia GPUを使う場合は、GPUサポートが付いているタグを指定して実行してください。 なお、GPUを使うためには--gpus=allなどのオプションを付ける必要があります。dockerもバージョン19.03以降である必要があると思います(未検証)。 % docker run --rm -d -v $PWD:/app -p 8888:8888 --gpus=all \ pman0214/pytorch_jupyterlab:1.9.0-cuda11.1-cudnn8-devel あとはブラウザでhttp://localhost:8888にアクセスすればjupyterlabが使えます。 jupyterlabのパスワードはjupyterです。 GPUにアクセスできているかどうかは、jupyterlab上で以下のようにpythonコードを実行すれば確認できます。 import torch print(torch.cuda.is_available()) TrueならGPUが使用可能で、GPU情報などを取得できます。 print(torch.cuda.get_device_name()) EPS画像出力への対応 論文などではいまだにEPS画像を提出せよなどという場合もあるため、EPS出力をサポートしたイメージも作りました。 使い方は上記のものと同じで、イメージ名だけが異なります。 ビルドしたい人向け ビルドに用いたファイル群はGitHubで公開しています。どうせならと思い、linux/amd64もlinux/arm64もサポートするmulti-architecture buildをしています。 なお、GPU対応版は別のベースイメージを使ってlinux/amd64用のみをビルドしました。 docker contextで接続先マシンを切り替えてbuildする手法もありますが(こっちのが速いらしい、当たり前か)、ここではより一般に適用可能なQEMUを使う場合で説明を行います。 ビルド用にQEMUを使ったコンテナが作成され、その中でビルドが実行されます。ビルドにはBuildkitが使われるので、ビルド用のコンテナなどを自分で準備する必要はありません。 ビルド方法の詳細はdockerの公式ドキュメントを参照するとよいです。概ね同じ手順になっていると思います。 準備(linuxでビルドする場合のみ) macやwindowsでビルドする場合は、最新版のDocker desktopが入っていれば準備は不要(になったはず)です。 experimental featureの有効化 まず、~/.docker/config.jsonに以下のような記述を追加するなどして、experimental featureを有効化します。 { ... "experimental": "true" ... } うまく有効化されれば、buildxコマンドが使えるようになります。 % docker buildx ls NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS default * docker default default running linux/amd64, linux/386 有効化できていない場合には、このようになります。確認していませんが、configを書いた後にdockerデーモンを再起動するなどが必要かもしれません。 % docker buildx ls docker: 'buildx' is not a docker command. See 'docker --help' QEMUの導入 ホストOSの機能で導入するとロクなことにならないので(経験者談)、dockerで配布されている導入キットを利用します。なお、このキットはBuildkitにも導入されています。 念のためインストールされている(かもしれない)QEMUを削除してから導入します。 % docker run --privileged --rm tonistiigi/binfmt --uninstall "qemu-*" % docker run --privileged --rm tonistiigi/binfmt --install all ビルダの準備 まず、buildxコマンドでビルダを準備します。名前は任意です。ここではmultiarchとしています。 --driverオプションでdocker-containerを指定することで、QEMUを実行するdocker-container上でビルドを行う指示をしています。 % docker buildx create --name multiarch --driver docker-container これで、buildx lsの出力はこのようになるはずです。 % docker buildx ls NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS multiarch docker-container multiarch0 unix:///var/run/docker.sock inactive default * docker default default running linux/amd64, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/arm/v7, linux/arm/v6 *が付いているものが、使用されるビルダ(現在選択されているビルダ)です。 作成したビルダmultiarchを使用するように変更します。 % docker buildx use multiarch ビルダが切り替わっていることが確認できます。multi-architecture buildしないときはdocker buildx use defaultとしてdefaultに戻してください。 % docker buildx ls NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS multiarch * docker-container multiarch0 unix:///var/run/docker.sock inactive default docker default default running linux/amd64, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/arm/v7, linux/arm/v6 ビルダのコンテナを作成します(実はこれをやらなくても、自動で作成されるという噂も・・・)。 % docker buildx inspect --bootstrap ビルド アーキテクチャを指定して、buildxコマンドを使ってビルドします。 注意するのは、--loadを付ける点です。付けないと、ビルドした結果は破棄されます(という警告も表示されます)。 --loadの代わりに--pushとすればdocker hubにpushされます。この場合にはあらかじめdocker loginしておき、-tオプションで適切なタグを指定しておいてください。 % git clone https://github.com/pman0214/docker_pytorch-jupyterlab.git % cd docker_pytorch-jupyterlab % docker buildx build \ --platform linux/amd64,linux/arm64 \ -t "pytorch_jupyterlab_latex:1.9.0" \ --build-arg VER=1.9.0 . \ --load 複数のアーキテクチャのビルドは並行して実行されます。 なお、QEMUを用いてビルドするのでホストと異なるアーキテクチャ上でのビルドは特に遅いです。例えば、Core i9 3.6GHz 16core with 64GB memoryなUbuntu 18.04マシンで、上記ビルドには全部で2時間ほど要しました。 GPU版のビルド GPU版はamd64なマシンがあれば、multi-architecture buildをする必要はありません。 Dockerfileが異なるので、その指定だけ忘れずにビルドしてください。 % docker build \ -f Dockerfile_cuda \ -t "pytorch_jupyterlab_latex:1.9.0-cuda11.1-cudnn8-devel" \ . おわりに 本記事では、pytorch + jupyterlabなdockerイメージの使い方及び作り方を説明しました。これでM1 macな人たちもdockerさえ入っていればaarch64ネイティブで実行されるpytorchライフを送れますね。 ビルドをgithub action化するとさらに幸せになれそうですが、未着手です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

まっさらな状態のMac MiniにFlutter環境を構築する

前提 MacOS Big Sur Mac mini (2018) Flutterのバージョンをプロジェクトごとに管理するために、fvmを使用しています まっさらなMac MiniにFlutter環境を構築する homebrew install 公式 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" まっさらな環境にdartをインストールする brew tap dart-lang/dart brew install dart fvm install Flutterのバージョンを管理するため 以後、flutterコマンドの前に fvmをつける pub global activate fvm pass into .zshrc zshを使用しているので環境設定 export PATH="$PATH":"$HOME/.pub-cache/bin" Flutterパッケージをインストール fvm flutter pub get Flutter doctor 環境構築できているか診断する fvm flutter doctor 結果 % fvm flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel unknown, 2.2.0, on macOS 11.3.1 20E241 darwin-x64, locale ja-JP) [✗] Android toolchain - develop for Android devices ✗ Unable to locate Android SDK. Install Android Studio from: https://developer.android.com/studio/index.html On first launch it will assist you in installing the Android SDK components. (or visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed instructions). If the Android SDK has been installed to a custom location, please use `flutter config --android-sdk` to update to that location.[✗] Xcode - develop for iOS and macOS ✗ Xcode installation is incomplete; a full installation is necessary for iOS development. Download at: https://developer.apple.com/xcode/download/ Or install Xcode via the App Store. Once installed, run: sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer sudo xcodebuild -runFirstLaunch ✗ CocoaPods not installed. CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side. Without CocoaPods, plugins will not work on iOS or macOS. For more info, see https://flutter.dev/platform-plugins To install see https://guides.cocoapods.org/using/getting-started.html#installation for instructions. [✓] Chrome - develop for the web [!] Android Studio (not installed) [✓] Connected device (1 available)! Doctor found issues in 3 categories. Android Studioを公式からインストールする https://developer.android.com/studio Xcodeをインストールする AppStoreでインストールする cocoapods install cocoapodsはswiftのパッケージマネージャー sudo gem install cocoapods flutter doctor --android-licenses 上のコマンドを実行してもエラーが出る % flutter doctor --android-licenses zsh: command not found: flutter % fvm flutter doctor --android-licenses Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156) at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75) at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81) at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73) at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 5 more Android StudioでAndroid SDK toolsのパッケージ名が、Android-SDK command line toolsに変更 添付のようにAndroidStudioで設定する 再度、同意する すべてyes fvm flutter doctor --android-licenses 再度Flutter doctor 環境構築できているか診断する fvm flutter doctor すべてチェックがついているはず これで環境は構築できています あとはエディターにfvmの設定を行う必要がある ←後日書きます VSCode Android Studio
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macでpythonの環境を設定しなおす

狙い bashやbrewを中途半端にいじった結果、自分の環境がわからなくなったため、最初からやり直します。 環境 macOS Big Sur 11.0 Xcodeをインストール・アップデート済み brewインストール済み ターミナルを整える デフォルトシェルをzshにする https://support.apple.com/ja-jp/guide/terminal/trml113/mac インストールしていく 以下をターミナルに打っていきます。 zsh brew install pyenv pyenv install 3.9.5 touch ~/.zshrc echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc echo 'eval "$(pyenv init -)"' >> ~/.zshrc echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init --path)" source ~/.zshrc pyenv install 3.9.5 pyenv global 3.9.5 参考 https://prog-8.com/docs/python-env https://blog.serverworks.co.jp/2021/05/12/233520
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

pyenv経由でMacにPythonをインストールする

MacにはデフォルトでPythonがインストールされていますが、バージョンが古く、今後複数のバージョンを使用する可能性も考慮してバージョン管理ツールである「pyenv」(ぱいえんぶ)を使って新しいPythonをインストールしてみました。 2021/5以降はパスを通す際に一部記述を変更する必要があるということがあったので、記事にしました。内容に不備などありましたら教えていただけると幸いです。 Homebrewのバージョン確認 まずはpyenvのインストールをするためにHomebrewを準備します。Macでは最初から用意されていますが、一応確認しておきます。 ターミナルを開き、下記コードをコピペしてください。 brew -v 以下のようになったらOKです。 Homebrew 3.2.0 もしbrew: command not foundとか出てきた場合はHomebrewがインストールされていませんので、下記の記事などを参考にお持ちのPCにHomebrewをインストールしてください。 pyenvをインストールする 続いてPythonのバージョン管理ツール「pyenv」をインストールします。 一応既にインストールされているか、下記のコードを入力してみてください。 pyenv -v インストールした覚えはないので、「コマンドが見つかりません」的なメッセージが返ってくるのではないでしょうか。 pyenv: command not found ですよね。 もしここで、 pyenv x.x.x のようにバージョン名が表示されていれば、既にインストールされているので、以下のコマンドは飛ばして結構です。 私と同様、まだインストールしていない方は以下のコマンドを入力し、pyenvをインストールしましょう。 brew install pyenv こういう画面が出ました。 よくわからないけど、できてるっぽい。 Updating Homebrew... ==> Auto-updated Homebrew! Updated 2 taps (homebrew/core and homebrew/cask). ==> New Formulae baidupcs-go pillow plow pyflow soapyrtlsdr soapysdr terminator waypoint ==> Updated Formulae Updated 146 formulae. ==> New Casks affinity-photo castr ears hyperkey keyboardholder lagrange ==> Updated Casks Updated 83 casks. ==> Downloading https://ghcr.io/v2/homebrew/core/pyenv/manifests/2.0.1 ######################################################################## 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/pyenv/blobs/sha256:06646f2a7779fc545226e0a79b26e3c7a3e50f5 ==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:06646f2a7779fc545226e0 ######################################################################## 100.0% ==> Pouring pyenv--2.0.1.big_sur.bottle.tar.gz ? /usr/local/Cellar/pyenv/2.0.1: 760 files, 2.6MB ちゃんとインストールできたか確認しましょう。 pyenv -v すると以下のようになりました。 pyenv 2.0.1 順調です。いい感じ。 pyenvのPATHを通す こういう、新しくツールをインストールしたときはPATH通さなきゃ使えないんですよね。私の場合シェルはzshを使っているので、Qiitaなどを参考に以下のコードを入力しました。 echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc echo 'eval "$(pyenv init -)"' >> ~/.zshrc zshrcを書き換えたときは変更を反映させる必要があります。 以下のコードを入力してください。 source ~/.zshrc (参考記事) 【投稿】bashが起動時〜bashrcとbash_profileについて〜 自分メモ用 するとこんな表示が、、 WARNING: `pyenv init -` no longer sets PATH. Run `pyenv init` to see the necessary changes to make to your configuration. おとなしく言われた通りにコードを入力してみる。 pyenv init すると以下のような表示が返ってきました。 # (The below instructions are intended for common # shell setups. See the README for more guidance # if they don't apply and/or don't work for you.) # Add pyenv executable to PATH and # enable shims by adding the following # to ~/.profile and ~/.zprofile: export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init --path)" # <--- ココがなんか違う # Load pyenv into the shell by adding # the following to ~/.zshrc: eval "$(pyenv init -)" # Make sure to restart your entire logon session # for changes to profile files to take effect. あれ、さっきzshrcに書いたのと違うやつがいる。 ということでコードを修正します。(vimコマンドを使ってターミナル上で済ませます。) vi .zshrc iキーを押してインサートモードにした上で、先ほどの eval "$(pyenv init --path)" に書き換えましょう。 書き換えたらescキーでコマンドモードに戻り、:wqで保存して終了します。 そしてzshrcを書き換えたら変更を反映させましょう。 source ~/.zshrc 最初からコレ書いとけよ、というご意見はごもっともなのですが、執筆時現在において多くの教材や記事に上記コードで説明されているものが多かったため、あえてそのままの流れて書いています。ご了承くださいませ。 で、Githubのイシュー見るともうそのままのことが書いてありますね。2021年5月にあった仕様の変更で今回のような警告が出るようになったみたいです。 https://github.com/pyenv/pyenv/issues/1906 Pythonをインストールする さて、気を取り直してPythonのインストールをしていきます。 今回は、先ほどインストールしたpyenvを使います。 まずは以下のコードを入力してみましょう。 pyenv install --list インストール可能なPythonのバージョン一覧が表示されます。 Available versions: 2.1.3 2.2.3 ~~ 3.9.5 3.10.0b2 3.10-dev ~~ stackless-3.5.4 stackless-3.7.5 今回は3.9.5をインストールします。 pyenv install 3.9.5 結構時間がかかりましたが、以下のような表示が返ってきました。 python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Downloading Python-3.9.5.tar.xz... -> https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz Installing Python-3.9.5... python-build: use readline from homebrew python-build: use zlib from xcode sdk Installed Python-3.9.5 to /Users/bnn/.pyenv/versions/3.9.5 よくわかりませんが、できてるみたいです。 Pythonのバージョンを確認してみましょう。 python --version Python 2.7.16 あれ? あぁ、pyenvを用いて使用するPythonのバージョンを変更する必要がありました。 では以下のコードでpyenvで管理しているPythonのバージョン一覧を確認してみましょう。 pyenv versions すると以下の表示が返ってきました。 * system (set by /Users/bnn/.pyenv/version) 3.9.5 インストールはできているけどデフォルトのバージョンを使っているということです。せっかくインストールしたんだから最新版を使いたいです。 pyenv global 3.9.5 これで使用するバージョンを変更できます。 再度バージョンを確認してみましょう。 pyenv versions すると以下の表示が返ってきました。 system * 3.9.5 (set by /Users/bnn/.pyenv/version) ちゃんと切り替わっているみたいです。 一応Pythonコマンドでも確認してみます。 python --version ドキドキ... Python 3.9.5 完璧です。 天才かもしれません。 さいごに 今回はバージョン管理ツールのpyenvのインストール及びパスの通し方、使用するバージョンの変更方法について理解することができました。 予期せぬ警告が出たときは、落ち着いて読んでみることが大事ですね。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む