non vorrei lavorare

2020年度からの小学校プログラミング教育の必修化を親として迎えるブロガーの書く、子供との日常

pyenvがぶっ壊れて何故かpython3が/usr/bin/python3になってしまう??

こんにちは、梅雨が明けませんが、子供たちはインドア派で、小学校が始まってからは、徐々に学校の同級生とフォートナイトをプレイしてます。@kjunichiです。

背景

Brytonのサイコンのデータと激安アクションカメラのデータを自前で連動させたくて、まずは、サイコンのFITファイルを読み込む方法を探してみたところ、Pythonでできることが分かった

yyatsuo.com

問題発生!

pip3 install fitdecode

で入れたモジュールが見つからない!

python3 sample.py

    import fitdecode
ModuleNotFoundError: No module named 'fitdecode'
pyenv global

で確認すると

system
3.7.7

なのに、

python3 -V

の結果が

Python 3.7.3

どうもこれはApple?のPythonの模様

import sys
print(sys.path)

すると

['', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python37.zip', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Users/kjunichi/Library/Python/3.7/lib/python/site-packages', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages']
which python3

の結果は

/Users/kjunichi/.pyenv/shims/python3

なので、pyenvは有効になってっぽい??

とりあえず解決

ダメもとで

pyenv global 3.7.7

としたら、

python3 -V
Python 3.7.7

当然この状態で

python -V

の結果は

Python 3.7.7

となり、2系のpythonが使えない状態になるが、まぁとりあえず解決した。

関連記事

16年前の記事

え、Githubのコードってgit cloneするだけじゃダメなことあるんだ!

おはようございます。フォートナイト、今シーズンはどんどん子供達とレベルが離されてる@kjunichiです。

背景

先日の記事

abrakatabura.hatenablog.com

にてC++のウェブサーバclaskを試した際、git cloneするだけじゃpicotestフォルダのコードが取得できず、cmakeでエラー になっていた。記事を早く仕上げたいから、手動で、ファイルをコピペ?して用意してやり過ごしていた。

CMake Error at CMakeLists.txt:50 (add_executable):
  Cannot find source file:

    picotest/picotest.c

  Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm
  .hpp .hxx .in .txx


CMake Error at CMakeLists.txt:50 (add_executable):
  No SOURCES given to target: clask_test


CMake Generate step failed.  Build files cannot be regenerated correctly.

git cloneだけだとダメなケースの詳細

どうやらsub moduleを使っている発生する模様。

git cloneだけだとダメな場合の対応方法

あらかじめ、サブモジュールを使っていることが分かっている場合、cloneする際に以下のオプション--recursiveをつければ解決!

git clone --recursive https://github.com/mattn/clask.git

git clone してこれに気づいたら、rm -rf して上記オプション付きのgitコマンドを実行するか、

git submodule update --init --recursive

とすれば解決!

おわりに

はじめはhttps方式がダメなのかとSSH方式に切り替えて試したりしたが、--recursiveを指定すれば良いことに なかなかたどり着けなかった。

参考資料

関連記事

15年前の記事

6年前の記事

4年前の記事

C++のウェブサーバclaskをmacOSで動かした

おはようございます。ようやく子供たちの学校も毎日登校することになり、在宅勤務をエンジョイできそうな@kjunichiです。

背景

PCはもっぱら子供たちに後れをとりつつもフォートナイトのレベル上げでのみ使用して、 それ以外は8コアの残念15インチモデルのMacBook Proで過去のブログやツイートをNoteにまとめる程度な生活を送っていた。

mattn.kaoriya.net

を見かけ、たまにはC++でもさわるか?と思い立ち、この宝の持ち腐れ状態のMacBook Proで試した。

no member named 'codecvt_utf8_utf16' in namespace 'std'

早速gitコマンドでクローンしてMacBook Proで試したところ、 C++のいつもの長ったらしいコンパイルエラーに遭遇した。

とビルドエラー。

Applec++c++17に未対応なのか?

 c++ --version                                           
Apple clang version 11.0.3 (clang-1103.0.32.62)
Target: x86_64-apple-darwin19.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

とバージョンが表示された。

www.phoronix.com

と言う記事を見つけ、これによると、llvm7.0からサポートされてるらしい。

mdfindコマンドに騙された?!

裏取りのためにmdfindコマンドで

mdfind codecvt_utf8_utf16

としてが、Xcode配下にはファイルが見つからない。

includeを追加するだけで解決した

codecvt_utf8_utf16をキーワードにSO(StackOverflow)でやりとりされてるコードの断片を読んだところ、 ダメもとで

#include <codecvt>

を入れてみたところ、ビンゴ!無事、コンパイル出来るようになった。

そしてこれは、

とツイートしたら、速攻で対応頂き解消した。@mattn_jpさんありがとうございました。

リンクエラー

-lstcc++fsはどうやら、FileSystemがC++に導入された初期のころは使われていたが、 すくなくともXcode環境にはlibstdc++fsなるライブラリは存在せず、libc++をリンクすれば リンクエラーが解消した。

https://twitter.com/kjunichi/status/1276314213128929280

と、こんな状態なので、まともなプルリク遅れるか怪しい状態だが、

と、どうやらCMake対応をされてるらしいので、自分がプルリク出すまでもなく、 解消されそうな気配。

実行結果

www.youtube.com

学んだこと

  • C++でも最近FileSystemなるライブラリがC++17で標準化された
  • wcharではない、多バイト文字列の処理ライブラリがC++にできたが、C++17で一部?非推奨になった
  • C++17移行はFileSystemを利用するのにはlibc++fsライブラリは不要な模様
  • C++は最新がC++11だと思っていたが、ずいぶん進んでるんだとなぁ
  • Appleもclang使ってるから割とC++も最新の規格が純正の開発環境でサポートされてるんだなぁ
  • claskのデフォルトのポートは8080

参考資料

関連記事

11年前の記事

8年前の記事