概要
pythonを実行する際、管理者権限でどうしても実行したい時がある。具体的には以下のようなケース。
- 管理者権限がないと書き込めないディレクトリに対してスクリプトを実行したい
- AWSのmount-s3のようなスーパーユーザでないとRead権限がないようなデータソースに対して実行したい
その際にsudoコマンドを付けて実行すると、エラーが発生して実行できない時があったため、その解決法を記載する。
解決したいエラー
pythonスクリプトを実行した時に、以下のようなエラーが発生した。sudoをつけずに実行すると実行できるので、pythonが入っていないというわけではない。
# 実行できない
hoge@hoge:~$ sudo python
sudo: python: command not found
# 実行できる
hoge@hoge:~$ python
Python 3.10.12 (main, Sep 11 2024, 15:47:36) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
原因
そもそもsudoはshellの一部というわけではなく、直接OSのシステムコールを直接呼び出してソフトウェア実行するらしく、エイリアスがそもそも継承されない実行になるらしい。なのでせっかくエイリアスを登録しても実行できないわけである。
解決策
PATHを引き継ぐなど、いろいろ解決法はあるみたいだが、個人的には以下が一番楽かなと。
# エイリアスの参照先を特定
hoge@hoge:~$ which python3
/usr/bin/python3
# 直接実行
hoge@hoge:~$ sudo /usr/bin/python3 XXX.py
参考
https://stackoverflow.com/questions/44726377/sudo-python-command-not-found