endaaman.com

2021-03-15

Tips

conda環境でxdg-openが正常に動かなくなる問題

condaのある仮想環境にいるときだけ常にブラウザで開こうとしてしまう

tl;dr

$ conda uninstall glib

で治る。ついでにseabornがuninstallされるばあいは、

$ pip install seaborn

でpipから拾うようにする。

解説

xdg-open(1)の実態は、デスクトップ環境を識別してその環境で適切なデフォルトアプリケーションを開く、ワークアラウンドの塊のようなシェルスクリプトである。

GNOME、MATE、XfceなどGTK系のデスクトップでは内部でgioコマンドを経由しているが、何者か(condaパッケージ)がgio$PATHに配置しているようであり、このconda仮想環境のgioが適切にデスクトップアプリケーションを選択できていないのが原因である。

bin/gioの由来を調べると、

$ cd ~/.miniconda3/pkgs
$ grep bin/gio -R .
grep: ./python-3.8.5-h7579374_1/compiler_compat/ld: No such file or directory
./glib-2.66.1-h680cd38_0/info/has_prefix:/home/conda/feedstock_root/build_artifacts/glib_1601587225743/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeh binary bin/gio
./glib-2.66.1-h680cd38_0/info/files:bin/gio
./glib-2.66.1-h680cd38_0/info/files:bin/gio-querymodules
./glib-2.66.1-h680cd38_0/info/paths.json:      "_path": "bin/gio",
./glib-2.66.1-h680cd38_0/info/paths.json:      "_path": "bin/gio-querymodules",
grep: ./libopencv-4.5.0-py38_3/include/libpng: No such file or directory
grep: ./python-3.8.3-cpython_he5300dc_0/compiler_compat/ld: No such file or directory
grep: ./python-3.8.8-hffdb5ce_0_cpython/compiler_compat/ld: No such file or directory
grep: ./_openmp_mutex-4.5-1_llvm/lib/libgomp.so.1: No such file or directory
./glib-2.56.2-hd408876_0/info/has_prefix:/tmp/build/80754af9/glib_1535475653755/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold binary bin/gio
./glib-2.56.2-hd408876_0/info/files:bin/gio
./glib-2.56.2-hd408876_0/info/files:bin/gio-querymodules
./glib-2.56.2-hd408876_0/info/paths.json:      "_path": "bin/gio",
./glib-2.56.2-hd408876_0/info/paths.json:      "_path": "bin/gio-querymodules",

どうやらglibbin/gioを配っているようだ。なので、

$ conda uninstall glib

で症状は治る。

ただしこのとき、自分の環境ではseabornが削除されて、jedi0.180.17parso0.70.8になった。jediの方はconda -c anaconda jediglibを混ぜずに再度0.18に戻すことができた(なんでかは知らん)。

そしてそもそもglibを連れてきたのはseabornのcondaパッケージのようなので、代わりにpip経由から取るようにすればいい。

$ pip install seaborn

でOK。ちなみにこのseabornのcondaパッケージだが、glibだけでなくqtにも依存しているので、環境との不整合を嫌うなら常にpipから使うようにしたほうが無難かもしれない。


©2024 endaaman.com