日々精進

新しく学んだことを書き留めていきます

sshでアクセスすると「Connection closed by UNKNOWN port 65535」エラー(再)

以前Connection closed by UNKNOWN port 65535エラーが出る場合を紹介したが、別の原因でまた出た。

anton0825.hatenablog.com

今回の原因は接続先IPアドレスが間違っていたこと。サーバのIPがxxx.xxx.xxx.111だとすると、xxx.xxx.xxx.112 にアクセスしていた。IPアドレスを修正すると直った。

エラーメッセージもっと分かりやすければ良いのに。。

batファイルを実行すると「内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」エラー

このエラーメッセージは色んな原因で出るんだろうけど・・ 自分のところで起きた時の原因は改行コードだった。

改行コードがLFの場合、batファイルの中身がascii文字のみの場合は大丈夫だが 2バイト文字が入るとエラーになる。

改行コードをCRLFにすると直った。

ストレージ容量を食っているフォルダを探したい場合はFolderSizesが便利

今まで容量空けたい場合はDiskAnalyzerを使ってたけど、重いので他のアプリを探した。 FolderSizesを使ってみたらサクサク動くので気に入った。

有料(しかもPERSONAL EDITIONで30$)だけど。。でも買ってもいいかな。

参考:

www.foldersizes.com

PythonのLGPLライブラリをimportしてもソースコードは公開しなくていい

LGPLライブラリを使ったらソースコード公開しないといけないもんだと思っていたが、 Pythonのimportは動的リンクで、動的リンクの場合はLGPLのライブラリをリンクしてもソースコードのライセンスはLGPLにしなくていいらしい。

参考:

qiita.com

future-architect.github.io

logging.config.dictConfigを実行すると「AttributeError: 'NoneType' object has no attribute 'flush'」エラー

原因はabsl-pyがデフォルトのログハンドラを書き換えてしまい、かつそいつがsys.stderrがNoneになる場合を考慮していないため。

恐らくPythonを別のプロセスからConsoleを表示させず起動すると標準エラー出力の出力先が無くてNoneになる。

無理矢理だけど、logging._handlerList = [] をlogging.config.dictConfigの前に実行すると直った。

デフォルトのログハンドラ書き換えとかお行儀悪すぎでしょ。。

参考:

qiita.com

github.com

environment.yamlでconda仮想環境を作ろうとするとdlibインストール時にエラーが発生する

dlibインストール時にcmakeを使ってビルドするようで、cmakeが入ってないとエラーがでる。

environment.yamlを使うならdlib以外をyamlを使ってインストールして、その後手動でdlibを入れるとかになりそう。。

手動の手順が入るのが嫌だったのでbatファイルで環境構築するようにした。 以下のようなbatファイルを作って実行すると自動で環境構築できた。

echo y | conda create --name myenv python=3.7.9
call conda activate myenv
pip install cmake==3.18.4.post1
pip install tflite==2.3.0
pip install opencv-python==4.1.1.26
pip install pillow==8.0.1
pip install dlib==19.18.0
echo y | pip uninstall cmake

conda activate/deactivateをbatファイルで実行するとそれ以降のコマンドが実行されない

activate/deactivateを実行する場合は以下のようにcallを頭につけないといけない。色々罠があるなぁ。。

echo y | conda create --name myenv python=3.7.9
call conda activate myenv
pip install cmake==3.18.4.post1

参考:

github.com