pandasql
Devuan(またはDebian)システムにシステム全体のPythonパッケージをインストールしたいと思います。 Pythonパッケージのインデックスにあるが(dpkg)パッケージがないようです。実際には存在しないとしましょう。
これでこの操作を試みると、pip install pandasql
仮想環境を使用するように求められます。
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.11/README.venv for more information.
...しかし、仮想環境は私が望むものではありません。foo
システム全体にインストールしたいです。どうすればいいですか?
ノート:
- 可能であれば、おおよその答えよりももっと一般的に答えてください
pandasql
。 - Devuan Excalibur(~= Debian Trixie), Python 3.11.6, x86_64 マシン
答え1
Debianがこれを許可しないという事実はどこかから来ています:pip
システム全体のインストールは設計上のシステム管理Pythonのインストールと互換性がありません。ピップ自身も悟った--system
インストールを「デフォルト」から「ユーザーがそれを指定し、自分が実行している作業を知りたい」にダウングレードする場合。 Debian は、このように仕事を台無しにすることができることをよく知っているので、そうすることができるpip
ソフトウェアを提供していません。
理論については多すぎる(より多くの背景)なぜDebianがこれを防ぐのか。
今練習してみましょう:
どうですか?
したがって、あなたがしなければならないことは、pip install --system pandasql
Debianと互換性があり安全な方法で行い、依存関係を更新するときにすべてが破損しないようにすることです。これには、pipパッケージから依存関係のDebianパッケージ名を推測し、依存関係が変更されたときに正しく機能しないパッケージが残らないようにすることが含まれます。
当然、Debianのソフトウェアのインストール方法はDebianパッケージを利用することです。更新が可能で、dpkg
互いのファイルを上書きしないようにする依存関係のリストがあり、完全に削除される可能性があります。全体的に、全体的なシステムの観点から見ると、pip
パッケージよりも優れています。あなたはそれが欲しい!
あなたのために困難な作業を行う小さなヘルパープログラムがあります。sudo apt install pypi2deb
使用することは難しくありません。
mkdir package_pandasql
cd package_pandasql
# Try an initial build
py2dsp --build pandasql
最後のステップが失敗し、表示error: Unmet build dependencies
された場合は、続行するためにインストールする必要がある項目が表示されます。私:
sudo apt install python3-all python3-numpy python3-pandas python3-setuptools python3-sqlalchemy
インストールを実行してもう一度やり直してください。
py2dsp --build pandasql
成功!
package_pandasql/result/
これでインストールできるインストール可能なパッケージが作成されましたsudo apt install ./result/python3-pandasql*.deb
。
答え2
すでに指摘したように、pipがシステム全体にパッケージをインストールすることを許可しないのは妥当な理由です。しかし、私はまた、同じシステムにアクセスしてソフトウェアを期待できる多くのユーザーにこのユースケース管理ソフトウェアを提供しています。 「ただ動作する」には、ソフトウェアを設定するために開発者の知識は必要ありません。
ユーザーが自分でインストールしようとすると、さまざまなバージョンがインストールされます。そのうちのいくつかは更新されますが、他のバージョンは更新されません。また、各ユーザーに大量のソフトウェアパッケージの独立したコピーを提供するため、多くのディスク容量が使用されます。
現在debian:bookwormで私にとって効果的な解決策は、名前付きの特別なユーザーとグループ用のパッケージをインストールし、他のpython-global
ユーザーがPYTHONPATH
変数を操作してそのユーザーのパッケージを継承できるようにすることです。
インストールパッケージは次のとおりです。
sudo -u python-global python3 -m pip install <x> --break-system-packages
/etc/profile.d/python-global.sh
次のコードがあります。
if [ -z "${__SOURCED_PYTHON_GLOBAL__}" ]; then
export PYTHONPATH="/home/python-global/python-packages/:$PYTHONPATH";
export PATH="/home/python-global/.local/bin/:$PATH";
export __SOURCED_PYTHON_GLOBAL__=1;
fi;
それでもシステムパッケージと競合することがありますが、ユーザーは必要に応じて変数を消去して比較的PYTHONPATH
簡単に無効にすることができます。あるいは、変更を防ぐために__SOURCED_PYTHON_GLOBAL__
自分で設定することもできます.profile
。
/etc/profile.d
ログインマネージャによっては自動的に取得されないため、追加の作業が必要になる場合があります。/etc/X11/Xsession.d/
コピーを作成することもできます。
「システムの中断」を説明するフラグを使用することが不安な場合は、それをユーザーが所有する--break-system-packages
適切な仮想環境に置き換えることができますpython-global
。仮想環境は一度だけ設定する必要があり、すべてのユーザーは同じ仮想環境を使用します。