LoginSignup
0
0

# pythonを任意のディレクトリ上のコマンドラインで動かす。

Posted at

目的

自作したpythonファイルを以下のようにコマンドラインツールとして実行できるようにする。
以下は成果物のイメージ(画像を回転させるプログラム。ffmpegを使えば...

user:~$ rotate.py
start rotate...
...
user:~$ cd HOGE
user:~/HOGE$ rotate.py
start rotate...
...

環境

  • Ubuntu 20.04 LTS
  • python 3.8

pythonを実行できるようにする

プログラムを作成する(詳細は省略)

rotate.py
# import cv2 # とりあえずコメントアウト

print("start rotate...")

実行可能にする

shebang(シバン)を追加する

rotate.py
+ #!/usr/bin/python3
chmod +x rotate.py

参考:

PATHを通す

ファイルがあるディレクトリをPATHに追加する。
今回は ~/.local/binというディレクトリにrotate.pyをコピーして、そこにPATHを通す。

# 実行ファイルのコピー
user:~$ mkdir ~/.local/bin
user:~$ cp rotate.py ~/.local/bin

# PATHを通す
user:~$ export PATH=~/.local/bin:$PATH
# 毎回通すのが面倒臭い場合は以下
user:~$ echo "export PATH=~/.local/bin:$PATH" >> ~/.bashrc
user:~$ source ~/.bashrc

参考:

実行確認

以下のようにいろんな場所で実行できるようになればOK。

user:~$ rotate.py
start rotate...
...
user:~$ cd HOGE
user:~/HOGE$ rotate.py
start rotate...
...

仮想環境毎の実行ファイルをコマンドラインで使えるようにする。

問題

実際には python を使う場合は venvanaconda等を使用して、それぞれ独立した仮想環境上で実行することが多い。それらの実行ファイルを前述した方法でコマンドラインで用いることはできない。
例えばrotate.pyでコメントアウトしていたところを修正する。

rotate.py
- # import cv2 # とりあえずコメントアウト
+ import cv2 # とりあえずコメントアウト

そして実行するとエラーが発生する。これは素のpythonにopencvがインストールされていないからである。

user:~$ rotate.py
Traceback (most recent call last):
  File "/home/user/.local/bin/rotate.py", line 2, in <module>
    import cv2
ModuleNotFoundError: No module named 'cv2'

対策

上述の問題はそれぞれの仮想環境の python を用いることで対処できる。
とりあえず、opencv がインストールされた仮想環境を作成する。

cd ~
user:~$ mkdir imgtools
user:~$ cd imgtools
user:~/imgtools$ python -m venv .venv
user:~/imgtools$ source .venv/bin/activate
user:~/imgtools$ pip install opencv-python

インストールが終わったら、rotate.pyのshebangを以下のように仮想環境の python の PATH に変更する。

~/.local/bin/rotate.py
- #!/usr/bin/python3
+ #!/home/user/imgtools/.venv/bin/python

そして実行する。すると import cv2 が問題なくインストールできているためエラーを吐かずに実行することができる。

user:~$ rotate.py
start rotate...
...

その他の仮想環境

anacondaなどの場合でも、以下のように shebang を編集することで、それぞれの仮想環境のライブラリをimport することができるようになる。

~/.local/bin/rotate.py
- #!/usr/bin/python3
+ #!/opt/conda/envs/imgenv/bin/python
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0