UbuntuでAPTを使っていたときは気にならなかったが、Arch系Linux(ここではPACMANでパッケージ管理するLinuxを指す)では少々気を付けなければならない点がいくつか存在する。
各言語のパッケージ管理ツールとの衝突
Pythonにはpip, Node.jsにはnpmというパッケージ管理ツールが存在する。
これらの言語用パッケージの導入をする場合、多くのWEBサイトでは
対策1 グローバル環境のパッケージ管理はPACMANで一括管理
上記の問題は複数のパッケージ管理ツールを用いて行ったことが原因である。
そのため、管理者権限を要するパッケージ管理はPACMANに統一すればよい。
例えば、pipの新しいバージョンが存在していた場合、
対策2 パッケージをユーザーフォルダ下で管理する
言語パッケージ及びパッケージ管理ツールをPACMAN非依存でユーザーフォルダ下にインストールした場合は、パッケージの導入に管理者権限を必要としない。
しかし、PACMANでは管理されていないために依存パッケージが導入済であっても重複してインストールされる。(インストール場所はもちろん異なるが…)
また、ローカル環境にインストールしてパスを通す、といった方法であれば各言語用パッケージ管理ツールを用いても依存関係のエラーは起こりにくい。
余談ではあるが、Rustのパッケージ管理ツールCargoは標準で~/.cargo
にパッケージを導入するので便利だと思う。
対策3 プロジェクト, 仮想環境単位でのパッケージ管理を行う
方針としては対策2と同様である。
しかし、各仮想環境内で用いる同一パッケージはグローバル環境にインストールした方が便利であるため、適宜手法の取捨選択が必要となる。
PACMAN管理のパッケージのバージョン依存
基本的にPACMANでは最新のパッケージを導入する。
利用したいパッケージが以前のバージョンでしか使えないといった問題に度々直面する。
対策 PACMANでの管理を止める
バージョン関係の依存が多い場合は、言語ごとのパッケージ管理ツールを用いてプロジェクト/仮想環境単位で管理するべきである。
この問題に直面した場合は、該当パッケージをPACMANで削除して、各言語のパッケージ管理ツールでインストールし直せばよい。
# example # PACMAN管理のパッケージの削除 sudo pacman -Rs <PACKAGE> # (仮想環境の作成) python -m venv venv # 仮想環境へのアクティベート source .venv/bin/activate # パッケージの導入 pip install <PACKAGE>
「ファイルが存在します」が直らない
上記とは逆で、PACMANでの管理に変更したい場合に「ファイルが存在します」といったエラーで導入できないケースが存在する。
これは他のパッケージ管理ツールでファイルを削除しきれなかったことに起因する。
対策 PACMANでファイルを上書きする
最終手段ではあるが、PACMANでは--overwrite "*"
というオプションをつけることで存在するファイルの上書きが可能である。
他のパッケージ管理ツールで管理されている場合は別の問題が発生する可能性があるが、該当パッケージ/ファイルが独立している時に限って上書きするのもひとつの手である。
記事の修正に関して
本記事は筆者の実経験から執筆したものであるが、経験/知識不足から適さない手法を紹介してしまっている可能性もある。
もし間違っている部分があったならば、本記事のコメント欄ないしは本ブログのTwitterアカウントにDMを送って頂けると有難い。その場合は早急に修正を行う所存である。
コメント