Pythonより35000倍速いと噂のMojoをインストールしてみた!!
大量に画像レンダリングが必要になったために、もっと速いツールを探し、Mojoを使ってみることにしました!
流れ
1.Magicのインストールと確認
curl -ssL https://magic.modular.com/da38900c-18bf-47ac-a8c0-eb24ff3c1a56 -o setup_script.sh
less setup_script.sh # 内容を確認
以下のサイトにコマンドラインツールがあったので、内容をかくにんしてみることにしました。
.内容
#!/usr/bin/env bash
set -euo pipefail
__wrap__() {
MODULAR_HOME=${MAGIC_VERSION:-"$HOME/.modular"}
BIN_DIR="$MODULAR_HOME/bin"
PLATFORM=$(uname -s)
ARCH=${MAGIC_ARCH:-$(uname -m)}
if [[ $PLATFORM == "Darwin" ]]; then
PLATFORM="apple-darwin"
elif [[ $PLATFORM == "Linux" ]]; then
PLATFORM="unknown-linux-musl"
elif [[ $(uname -o) == "Msys" ]]; then
PLATFORM="pc-windows-msvc"
fi
if [[ $ARCH == "arm64" ]] || [[ $ARCH == "aarch64" ]]; then
ARCH="aarch64"
fi
BINARY="magic-${ARCH}-${PLATFORM}"
printf "Installing the latest version of Magic...
"
DOWNLOAD_URL="https://dl.modular.com/public/magic/raw/versions/latest/${BINARY}"
mkdir -p "$BIN_DIR"
if hash curl 2> /dev/null; then
HTTP_CODE=$(curl -SL --progress-bar "$DOWNLOAD_URL" --output "${BIN_DIR}/magic" --write-out "%{http_code}")
if [[ ${HTTP_CODE} -lt 200 || ${HTTP_CODE} -gt 499 ]]; then
echo "error: ${HTTP_CODE} response. Please try again later."
exit 1
elif [[ ${HTTP_CODE} -gt 299 ]]; then
echo "error: '${DOWNLOAD_URL}' not found."
echo "Sorry, Magic is not available for your OS and CPU architecture. " "See https://modul.ar/requirements."
exit 1
fi
elif hash wget 2> /dev/null; then
if ! wget -q --show-progress --output-document="${BIN_DIR}/magic" "$DOWNLOAD_URL"; then
echo "error: '${DOWNLOAD_URL}' not found."
echo "Sorry, Magic is not available for your OS and CPU architecture. " "See https://modul.ar/requirements."
exit 1
fi
fi
# gh release download --repo modularml/magic $VERSION -p $BINARY --clobber -O "${BIN_DIR}/magic"
chmod +x "${BIN_DIR}/magic"
echo "Done. The 'magic' binary is in '${BIN_DIR}'"
update_shell() {
FILE=$1
LINE=$2
# shell update can be suppressed by `MAGIC_NO_PATH_UPDATE` env var
[[ ! -z "${MAGIC_NO_PATH_UPDATE-}" ]] && echo "No path update because MAGIC_NO_PATH_UPDATE has a value" && return
# Create the file if it doesn't exist
if [ -f "$FILE" ]; then
touch "$FILE"
fi
# Append the line if not already present
if ! grep -Fxq "$LINE" "$FILE"
then
echo "$LINE" >> "$FILE"
echo -e "
Two more steps:
"
echo -e "1. To use 'magic', run this command so it's in your PATH:
"
echo -e "source ${FILE}
"
echo -e "2. To build with MAX and Mojo, go to http://modul.ar/get-started
"
fi
}
case "$(basename "$SHELL")" in
bash)
if [ -w ~/.bash_profile ]; then
BASH_FILE=~/.bash_profile
else
# Default to bashrc as that is used in non login shells instead of the profile.
BASH_FILE=~/.bashrc
fi
LINE="export PATH=\"\$PATH:${BIN_DIR}\""
update_shell $BASH_FILE "$LINE"
;;
fish)
LINE="fish_add_path ${BIN_DIR}"
update_shell ~/.config/fish/config.fish "$LINE"
;;
zsh)
LINE="export PATH=\"\$PATH:${BIN_DIR}\""
update_shell ~/.zshrc "$LINE"
;;
tcsh)
LINE="set path = ( $path ${BIN_DIR} )"
update_shell ~/.tcshrc "$LINE"
;;
*)
echo "Could not update shell: $(basename "$SHELL")"
echo "Please permanently add '${BIN_DIR}' to your $PATH to enable the 'magic' command."
;;
esac
echo da38900c-18bf-47ac-a8c0-eb24ff3c1a56 > "$MODULAR_HOME/webUserId"
}; __wrap__
(END)
こちらは最後にqを押して脱出します。
で、内容ですが、以下の通りです。
2.セットアップ
owner@Linux-for-owner:~$ curl -ssL https://magic.modular.com/da38900c-18bf-47ac-a8c0-eb24ff3c1a56 | bash
Installing the latest version of Magic...
######################################################################## 100.0%
Done. The 'magic' binary is in '/home/owner/.modular/bin'
Two more steps:
1. To use 'magic', run this command so it's in your PATH:
source /home/owner/.bashrc
2. To build with MAX and Mojo, go to http://modul.ar/get-started
実際に導入していきます。
.シェル設定の反映
source /home/owner/.bashrc
これは、シェルの設定を反映させ、magicを使用可能にしているところです。
.「hello-world」という Mojo プロジェクトを作成
magic init hello-world --format mojoproject
すると、こちらの画面が出てきます。
✔ Created /home/owner/hello-world/mojoproject.toml
✔ Added max >=24.5.0,<25
3.Mojo、Libmojolicious-Perlのインストール
sudo snap install mojo # version 1.0.0+601, or
sudo apt install libmojolicious-perl # version 9.35+dfsg-1
すると、以下の画面が出てきます。
owner@Linux-for-owner:~$ sudo snap install mojo # version 1.0.0+601, or
sudo apt install libmojolicious-perl # version 9.35+dfsg-1
[sudo] owner のパスワード:
error: This revision of snap "mojo" was published using classic confinement
and thus may perform arbitrary system changes outside of the security
sandbox that snaps are usually confined to, which may put your system at
risk.
If you understand and want to proceed repeat the command including
--classic.
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
libb-hooks-op-check-perl libclass-method-modifiers-perl libcommon-sense-perl
libcpanel-json-xs-perl libdevel-callchecker-perl
libdynaloader-functions-perl libev-perl libfuture-asyncawait-perl
libfuture-perl libfuture-xs-perl libio-socket-socks-perl libjs-bootstrap4
libjs-highlight.js libmime-charset-perl libmodule-pluggable-perl
libmodule-runtime-perl libmojo-server-fastcgi-perl libparams-classify-perl
librole-tiny-perl libsombok3 libterm-table-perl libtest2-suite-perl
libunicode-linebreak-perl libxs-parse-keyword-perl libxs-parse-sublike-perl
提案パッケージ:
libencode-eucjpascii-perl libencode-hanextra-perl libpod2-base-perl
libscalar-number-perl
以下のパッケージが新たにインストールされます:
libb-hooks-op-check-perl libclass-method-modifiers-perl libcommon-sense-perl
libcpanel-json-xs-perl libdevel-callchecker-perl
libdynaloader-functions-perl libev-perl libfuture-asyncawait-perl
libfuture-perl libfuture-xs-perl libio-socket-socks-perl libjs-bootstrap4
libjs-highlight.js libmime-charset-perl libmodule-pluggable-perl
libmodule-runtime-perl libmojo-server-fastcgi-perl libmojolicious-perl
libparams-classify-perl librole-tiny-perl libsombok3 libterm-table-perl
libtest2-suite-perl libunicode-linebreak-perl libxs-parse-keyword-perl
libxs-parse-sublike-perl
アップグレード: 0 個、新規インストール: 26 個、削除: 0 個、保留: 65 個。
3,082 kB のアーカイブを取得する必要があります。
この操作後に追加で 12.1 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://archive.ubuntu.com/ubuntu noble/main amd64 libb-hooks-op-check-perl amd64 0.22-3build1 [9,518 B]
取得:2 http://archive.ubuntu.com/ubuntu noble/main amd64 libclass-method-modifiers-perl all 2.15-1 [16.1 kB]
取得:3 http://archive.ubuntu.com/ubuntu noble/main amd64 libcommon-sense-perl amd64 3.75-3build3 [20.4 kB]
取得:4 http://archive.ubuntu.com/ubuntu noble/main amd64 libcpanel-json-xs-perl amd64 4.37-1build3 [114 kB]
取得:5 http://archive.ubuntu.com/ubuntu noble/main amd64 libdynaloader-functions-perl all 0.003-3 [12.1 kB]
取得:6 http://archive.ubuntu.com/ubuntu noble/main amd64 libdevel-callchecker-perl amd64 0.008-2build3 [13.2 kB]
取得:7 http://archive.ubuntu.com/ubuntu noble/universe amd64 libev-perl amd64 4.34-1build3 [239 kB]
取得:8 http://archive.ubuntu.com/ubuntu noble/universe amd64 libfuture-perl all 0.50-1 [76.6 kB]
取得:9 http://archive.ubuntu.com/ubuntu noble/universe amd64 libterm-table-perl all 0.018-1 [28.4 kB]
取得:10 http://archive.ubuntu.com/ubuntu noble/universe amd64 libtest2-suite-perl all 0.000159-1 [397 kB]
取得:11 http://archive.ubuntu.com/ubuntu noble/main amd64 libxs-parse-keyword-perl amd64 0.39-1build3 [54.7 kB]
取得:12 http://archive.ubuntu.com/ubuntu noble/main amd64 libxs-parse-sublike-perl amd64 0.21-2build3 [39.9 kB]
取得:13 http://archive.ubuntu.com/ubuntu noble/universe amd64 libfuture-asyncawait-perl amd64 0.66-1build3 [50.3 kB]
取得:14 http://archive.ubuntu.com/ubuntu noble/universe amd64 libfuture-xs-perl amd64 0.12-1build3 [27.5 kB]
取得:15 http://archive.ubuntu.com/ubuntu noble/universe amd64 libio-socket-socks-perl all 0.74-3 [28.3 kB]
取得:16 http://archive.ubuntu.com/ubuntu noble/universe amd64 libjs-bootstrap4 all 4.6.1+dfsg1-4 [537 kB]
取得:17 http://archive.ubuntu.com/ubuntu noble/universe amd64 libjs-highlight.js all 9.18.5+dfsg1-2 [385 kB]
取得:18 http://archive.ubuntu.com/ubuntu noble/universe amd64 libmime-charset-perl all 1.013.1-2 [31.0 kB]
取得:19 http://archive.ubuntu.com/ubuntu noble/universe amd64 libmodule-pluggable-perl all 5.2-4 [20.0 kB]
取得:20 http://archive.ubuntu.com/ubuntu noble/main amd64 libparams-classify-perl amd64 0.015-2build5 [20.1 kB]
取得:21 http://archive.ubuntu.com/ubuntu noble/main amd64 libmodule-runtime-perl all 0.016-2 [16.4 kB]
取得:22 http://archive.ubuntu.com/ubuntu noble/universe amd64 libmojolicious-perl all 9.35+dfsg-1 [792 kB]
取得:23 http://archive.ubuntu.com/ubuntu noble/universe amd64 libmojo-server-fastcgi-perl all 0.50-2 [14.3 kB]
取得:24 http://archive.ubuntu.com/ubuntu noble/main amd64 librole-tiny-perl all 2.002004-1 [16.3 kB]
取得:25 http://archive.ubuntu.com/ubuntu noble/universe amd64 libsombok3 amd64 2.4.0-2build1 [29.4 kB]
取得:26 http://archive.ubuntu.com/ubuntu noble/universe amd64 libunicode-linebreak-perl amd64 0.0.20190101-1build7 [92.6 kB]
3,082 kB を 2秒 で取得しました (1,503 kB/s)
以前に未選択のパッケージ libb-hooks-op-check-perl:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 228810 個のファイルとディレクトリがイン
ストールされています。)
.../00-libb-hooks-op-check-perl_0.22-3build1_amd64.deb を展開する準備をしていま
す ...
libb-hooks-op-check-perl:amd64 (0.22-3build1) を展開しています...
以前に未選択のパッケージ libclass-method-modifiers-perl を選択しています。
.../01-libclass-method-modifiers-perl_2.15-1_all.deb を展開する準備をしています
...
libclass-method-modifiers-perl (2.15-1) を展開しています...
以前に未選択のパッケージ libcommon-sense-perl:amd64 を選択しています。
.../02-libcommon-sense-perl_3.75-3build3_amd64.deb を展開する準備をしています ..
.
libcommon-sense-perl:amd64 (3.75-3build3) を展開しています...
以前に未選択のパッケージ libcpanel-json-xs-perl:amd64 を選択しています。
.../03-libcpanel-json-xs-perl_4.37-1build3_amd64.deb を展開する準備をしています
...
libcpanel-json-xs-perl:amd64 (4.37-1build3) を展開しています...
以前に未選択のパッケージ libdynaloader-functions-perl を選択しています。
.../04-libdynaloader-functions-perl_0.003-3_all.deb を展開する準備をしています .
..
libdynaloader-functions-perl (0.003-3) を展開しています...
以前に未選択のパッケージ libdevel-callchecker-perl:amd64 を選択しています。
.../05-libdevel-callchecker-perl_0.008-2build3_amd64.deb を展開する準備をしてい
ます ...
libdevel-callchecker-perl:amd64 (0.008-2build3) を展開しています...
以前に未選択のパッケージ libev-perl:amd64 を選択しています。
.../06-libev-perl_4.34-1build3_amd64.deb を展開する準備をしています ...
libev-perl:amd64 (4.34-1build3) を展開しています...
以前に未選択のパッケージ libfuture-perl を選択しています。
.../07-libfuture-perl_0.50-1_all.deb を展開する準備をしています ...
libfuture-perl (0.50-1) を展開しています...
以前に未選択のパッケージ libterm-table-perl を選択しています。
.../08-libterm-table-perl_0.018-1_all.deb を展開する準備をしています ...
libterm-table-perl (0.018-1) を展開しています...
以前に未選択のパッケージ libtest2-suite-perl を選択しています。
.../09-libtest2-suite-perl_0.000159-1_all.deb を展開する準備をしています ...
libtest2-suite-perl (0.000159-1) を展開しています...
以前に未選択のパッケージ libxs-parse-keyword-perl を選択しています。
.../10-libxs-parse-keyword-perl_0.39-1build3_amd64.deb を展開する準備をしていま
す ...
libxs-parse-keyword-perl (0.39-1build3) を展開しています...
以前に未選択のパッケージ libxs-parse-sublike-perl:amd64 を選択しています。
.../11-libxs-parse-sublike-perl_0.21-2build3_amd64.deb を展開する準備をしていま
す ...
libxs-parse-sublike-perl:amd64 (0.21-2build3) を展開しています...
以前に未選択のパッケージ libfuture-asyncawait-perl を選択しています。
.../12-libfuture-asyncawait-perl_0.66-1build3_amd64.deb を展開する準備をしていま
す ...
libfuture-asyncawait-perl (0.66-1build3) を展開しています...
以前に未選択のパッケージ libfuture-xs-perl を選択しています。
.../13-libfuture-xs-perl_0.12-1build3_amd64.deb を展開する準備をしています ...
libfuture-xs-perl (0.12-1build3) を展開しています...
以前に未選択のパッケージ libio-socket-socks-perl を選択しています。
.../14-libio-socket-socks-perl_0.74-3_all.deb を展開する準備をしています ...
libio-socket-socks-perl (0.74-3) を展開しています...
以前に未選択のパッケージ libjs-bootstrap4 を選択しています。
.../15-libjs-bootstrap4_4.6.1+dfsg1-4_all.deb を展開する準備をしています ...
libjs-bootstrap4 (4.6.1+dfsg1-4) を展開しています...
以前に未選択のパッケージ libjs-highlight.js を選択しています。
.../16-libjs-highlight.js_9.18.5+dfsg1-2_all.deb を展開する準備をしています ...
libjs-highlight.js (9.18.5+dfsg1-2) を展開しています...
以前に未選択のパッケージ libmime-charset-perl を選択しています。
.../17-libmime-charset-perl_1.013.1-2_all.deb を展開する準備をしています ...
libmime-charset-perl (1.013.1-2) を展開しています...
以前に未選択のパッケージ libmodule-pluggable-perl を選択しています。
.../18-libmodule-pluggable-perl_5.2-4_all.deb を展開する準備をしています ...
libmodule-pluggable-perl (5.2-4) を展開しています...
以前に未選択のパッケージ libparams-classify-perl:amd64 を選択しています。
.../19-libparams-classify-perl_0.015-2build5_amd64.deb を展開する準備をしていま
す ...
libparams-classify-perl:amd64 (0.015-2build5) を展開しています...
以前に未選択のパッケージ libmodule-runtime-perl を選択しています。
.../20-libmodule-runtime-perl_0.016-2_all.deb を展開する準備をしています ...
libmodule-runtime-perl (0.016-2) を展開しています...
以前に未選択のパッケージ libmojolicious-perl を選択しています。
.../21-libmojolicious-perl_9.35+dfsg-1_all.deb を展開する準備をしています ...
libmojolicious-perl (9.35+dfsg-1) を展開しています...
以前に未選択のパッケージ libmojo-server-fastcgi-perl を選択しています。
.../22-libmojo-server-fastcgi-perl_0.50-2_all.deb を展開する準備をしています ...
libmojo-server-fastcgi-perl (0.50-2) を展開しています...
以前に未選択のパッケージ librole-tiny-perl を選択しています。
.../23-librole-tiny-perl_2.002004-1_all.deb を展開する準備をしています ...
librole-tiny-perl (2.002004-1) を展開しています...
以前に未選択のパッケージ libsombok3:amd64 を選択しています。
.../24-libsombok3_2.4.0-2build1_amd64.deb を展開する準備をしています ...
libsombok3:amd64 (2.4.0-2build1) を展開しています...
以前に未選択のパッケージ libunicode-linebreak-perl を選択しています。
.../25-libunicode-linebreak-perl_0.0.20190101-1build7_amd64.deb を展開する準備を
しています ...
libunicode-linebreak-perl (0.0.20190101-1build7) を展開しています...
libmodule-pluggable-perl (5.2-4) を設定しています ...
libterm-table-perl (0.018-1) を設定しています ...
libdynaloader-functions-perl (0.003-3) を設定しています ...
libclass-method-modifiers-perl (2.15-1) を設定しています ...
libsombok3:amd64 (2.4.0-2build1) を設定しています ...
libcpanel-json-xs-perl:amd64 (4.37-1build3) を設定しています ...
libfuture-perl (0.50-1) を設定しています ...
libcommon-sense-perl:amd64 (3.75-3build3) を設定しています ...
libtest2-suite-perl (0.000159-1) を設定しています ...
libxs-parse-sublike-perl:amd64 (0.21-2build3) を設定しています ...
libxs-parse-keyword-perl (0.39-1build3) を設定しています ...
libio-socket-socks-perl (0.74-3) を設定しています ...
libb-hooks-op-check-perl:amd64 (0.22-3build1) を設定しています ...
libfuture-asyncawait-perl (0.66-1build3) を設定しています ...
libjs-highlight.js (9.18.5+dfsg1-2) を設定しています ...
libmime-charset-perl (1.013.1-2) を設定しています ...
libfuture-xs-perl (0.12-1build3) を設定しています ...
librole-tiny-perl (2.002004-1) を設定しています ...
libjs-bootstrap4 (4.6.1+dfsg1-4) を設定しています ...
libev-perl:amd64 (4.34-1build3) を設定しています ...
libmojolicious-perl (9.35+dfsg-1) を設定しています ...
libdevel-callchecker-perl:amd64 (0.008-2build3) を設定しています ...
libunicode-linebreak-perl (0.0.20190101-1build7) を設定しています ...
libmojo-server-fastcgi-perl (0.50-2) を設定しています ...
libparams-classify-perl:amd64 (0.015-2build5) を設定しています ...
libmodule-runtime-perl (0.016-2) を設定しています ...
man-db (2.12.0-4build2) のトリガを処理しています ...
libc-bin (2.39-0ubuntu8.3) のトリガを処理しています ...
owner@Linux-for-owner:~$
4.仮想環境の起動
cd hello-world && magic shell
すると、こうなります。
. "/tmp/pixi_env_qRN.sh"
owner@Linux-for-owner:~/hello-world$ . "/tmp/pixi_env_qRN.sh"
(hello-world) owner@Linux-for-owner:~/hello-world$
5.Python3との連携
export MOJO_PYTHON="/usr/bin/python3"
こちらもやっておくと、楽になります。
インストール後
これから使ってみて、効果を検証してみたいと思います!!
実行コマンドは以下のような形です。
mojo colorize_grayscale.mojo
おまけ
てか、Mojoのこれ、何ですか???
Python3はちゃんとPythonスクリプト、と表記されるのですが。。。
何故(なにゆえ)にMojoは胡散臭いファイル形式なのでしょうか?
いいなと思ったら応援しよう!
note限定で、みんなのフォトギャラリーに無償で大量の画像を順次UPする予定です!ですが、ペタバイトクラスで供給するとなると、容量が一杯になり、皆さんのチップが必要となります!これからも画像をどんどん供給していくので、チップをお願いします!