自分用Pythonプロジェクト開発関連コマンドチートシート

<h2>Pythonプロジェクト開発にあたりプロジェクトよく使いそうなコマンドやスクリプトに関する覚え書き</h2>（なお、筆者は学習PCはWindows、エディターはVScodeを主に使用のためMacは調べ切れていませんm(_ _)m）</h2>

<h2>～開発環境構築（venvの場合）</h2>
<h3>　venvフォルダの作成</h3>
次のいずれかをディレクトリ直下で実行

〇 cmd（コマンドプロンプト）の場合
```powershell
wsl
python3 -m venv venv
```
〇 powershell の場合
```powershell
#実行ポリシーを変更
PowerShell Set-ExecutionPolicy RemoteSigned CurrentUser
py -m venv venv
```

____

<h3>　venv の有効化（activate）</h3>
次のいずれかをディレクトリ直下で実行

〇 cmd（コマンドプロンプト）の場合
```powershell
.\venv\Scripts\activate
```

〇 powershellの場合
```powershell
venv\Scripts\Activate.ps1
#最後はps「イチ」
```

<h4>　※本Qiita筆者は基本的にエディターは VScodeを使っていますが、（2024.7.11現在）特段何かvenvに関わる設定しておらず、PCシャットダウン時（または VScodeを閉じた時点？？）には有効化が切れるようです。（※有効化時には、powershellの場合、以下の画像のように（venv）という表示が出ます）</h4>

![venv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/3f606cc6-ca5d-bf72-5167-cd0d6181ced5.png)

<h3>　開発環境をvenvで進めてGithubでコードを管理する場合の注意</h3>

　venvフォルダ内には以下のようなファイル（ほとんどが各venvにインストールしたライブラリーに関する情報）が入っていますが、2枚目の画像にあるように **venvそのものPC内でのパス？の情報を以下の pyvenv.cfg は含んでいるため少なくともこのファイルは.gitignoreに記述すべきではないか**と感じました。
　**※パスの中に個人のユーザー名が入っている可能性がある。requirements.txtがあれば必要なライブラリーはすぐに復元可能なため、venvフォルダごと.gitignoreに書いておいてもよい？？**

![environment1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/bf23da78-7a22-e640-e621-d5f5c76c66bd.png)

![environment2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/3b9ee3b0-6237-8069-ea95-b5ee28537c9c.png)


<h3>　ライブラリー（またはパッケージの）インストール関係</h3>

〇 pip 自体のアップグレード

```powershell
python -m pip install --upgrade pip
```

〇 pip で各開発環境にインストールしたライブラリーなどの現在のバージョン及び更新することで得られる最新バージョンの確認

```powershell
py -m pip list --outdated
```

〇 上のコマンドで表示されたインストールされているライブラリー（・パッケージ）のうち、指定したものを最新のバージョンに更新する

```powershell
py -m pip install --upgrade 更新したいライブラリー（・パッケージ）名
```

〇 ライブラリーのアンインストール

```powershell
pip uninstall アンインストールしたいライブラリー（・パッケージ）名
```

<h3>　requirements.txt（ライブラリ名とバージョン番号を指定してインストールするためのテキストファイル）関係</h3>

〇requirements.txtの作成&**更新**（普通にメモ帳などでも作成可能）

※テキストファイルの名前は慣例として、requirements.txt とするので、違うファイル名で作成する場合、下記の「requirements」を適宜変える。
```powershell
pip freeze > requirements.txt
```
※pipですでにインストールされているものについては、作成・**更新**時に自動的に記述される。
**※venvを一旦削除した状態で新たにvenvを作り直し、pip installをしないまま、このコマンドを打つと、requirements.txtが真っ白にリセットされるので注意**
＝＝＞[さすがにPoetryの学習始めました](#poetry関係)

〇作成した requirements.txt のファイルの名前を表示

```powershell
cat requirements.txt
```

〇 requirements.txt を参照して（書かれた）ライブラリー（・パッケージ）を一括インストール

```powershell
pip install -r requirements.txt
```

<h2>開発～</h2>
<h3>環境変数関係</h3>

〇（pip等でライブラリーなど設定した状態での使える）環境変数一覧出力

```python
import os
 
if __name__ == '__main__':
 
    for x in os.environ:
        print((x, os.getenv(x)))
```
※なお、デフォルトで使えるものもいくつかあるように思える

①「TESTING」：特定のテストモードを有効にするために使用されるカスタムの環境変数（Trueのとき、アプリケーションがテストモードで動作するようにする。**このテストモードでは、実際のデータベースではなくテスト用のデータベースを使用したり、メール送信などの特定の機能を無効にしたりすることが一般的**）

※実際に TESTING = False になっていると、例えば flask-mailを使用してフォームでポスト送信した内容がメール送信するようにしてある場合、「ポスト送信自体にエラーは起こっておらずスクリプトも走っているはずなのに、メールが来ない」という状態が発生しました。

<details><summary>参考記事</summary>

https://stackoverflow.com/questions/17980351/flask-mail-not-sending-emails-no-error-is-being-reported
</details>


```.env_or_config.py
TESTING = True (or False)
```

## Poetry関係

https://qiita.com/thinking-weed/private/dda47b01dff1c294686b

たぶん一番使うのは、既存のプロジェクトにPoetryを導入
```powershell
wsl
$ poetry init
```

## Flaskを始めてみる場合

<h3>create_app()や.envを定義せずにとりあえず始めてみる場合</h3>
<h4>（１）最低限のフォルダ等の構成</h4>
最低限以下のようにフォルダやapp.pyを作成（拡張子が.pyであれば、名前はapp.pyでなくともよい。まだ、この段階ではapp.pyの中身は空でよい）

```
 appsフォルダ
  |--app.py
 venv
```
<h4>（２）flask をインストール</h4>
pipなら以下のコマンドでインストール

```powershell
pip install flask
```

**※注：Python外部ライブラリーあるあるだと思うのですが、flaskとFlaskは別物で Flask $\subset$ flask で、flask内に他にも必要不可欠なライブラリーが以下のように入っているため、「flask」で一気にインストールする方が楽**

<details><summary>インストール後、実際こんな感じでimport</summary>

![import (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/7c8347fe-b270-29e6-40f4-097a22b76961.png)

![import (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/a6541e46-3f71-a8c8-9135-0329202a5420.png)

</details>

## Django関連

### ①プロジェクトの作成
```powershell
django-admin startproject プロジェクト名
```
### ②開発用サーバーの起動
```powershell
python manage.py runserver
#もしくは
py manage.py runserver
#もしくは
python3 manage.py runserver
```
※プロジェクト作成したときにデフォルトで作成されるmanage.pyの名前をいじっていない場合

### ③Djangoの各プロジェクト内にアプリケーション（各機能、flaskでいうBlueprintに近い）のデフォルトを作成

```powershell
python manage.py startapp 各アプリ（＝機能）名
#もしくは
py manage.py startapp 各アプリ（＝機能）名
#もしくは
python3 manage.py startapp 各アプリ（＝機能）名
```

## Github関連

https://qiita.com/thinking-weed/items/862497a431b23146f069

https://qiita.com/thinking-weed/items/702bc7353edb644e567d

<h1>主な参考資料</h1>

① Pythonエンジニア育成推進協会　Python実践レシピ　【技術評論社】　
鈴木たかのり、筒井隆次、寺田　学、杉田雅子、門脇 諭 、福田 隼也（共著） 
<details><summary>Amazonリンク</summary>

https://www.amazon.co.jp/Python%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E8%82%B2%E6%88%90%E6%8E%A8%E9%80%B2%E5%8D%94%E4%BC%9A%E7%9B%A3%E4%BF%AE-Python%E5%AE%9F%E8%B7%B5%E3%83%AC%E3%82%B7%E3%83%94-%E9%88%B4%E6%9C%A8-%E3%81%9F%E3%81%8B%E3%81%AE%E3%82%8A/dp/4297125765
</details>

② Python Flask によるwebアプリ開発入門　物体検知アプリ&機械学習APIの作り方【翔泳社】　
佐藤晶基、平田哲也（共著）　寺田　学（監修） 

<details><summary>Amazonリンク</summary>

https://www.amazon.co.jp/Python-Flask%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-%E7%89%A9%E4%BD%93%E6%A4%9C%E7%9F%A5%E3%82%A2%E3%83%97%E3%83%AA-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92API%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E4%BD%90%E8%97%A4/dp/4798166464/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3J712XAZ7X50L&dib=eyJ2IjoiMSJ9.yH00bs1Pl6Rl85dmDtCAJkl_EJB7UAQfs43tQpO3NVLbc8y2QzE-fc8P1OPmpqT_k1t7DjCHL2HqXb4PPGC25KppqfNbCKQfxn9T1Jt2E6b7DIgQKVxq6GgYrTcDfqG-VMnJBeFf8y7VF7v7va7FYfTWibF8wf37vi4XShJZbNsYPtxY8g6Xj6NidkF0yonhIGOM2cwUr_s-u1QztH3FXT3PPsn3ncxmBqCZoKRa-6E.PTOg2T9-s0I5PY9KcGhdZn17orf4MLMeiBOtbukqKsI&dib_tag=se&keywords=Python+Flask+%E3%81%AB%E3%82%88%E3%82%8Bweb%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80+%E7%BF%94%E6%B3%B3%E7%A4%BE&qid=1720703899&s=books&sprefix=python+flask+%E3%81%AB%E3%82%88%E3%82%8Bweb%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80+%E7%BF%94%E6%B3%B3%E7%A4%BE%2Cstripbooks%2C564&sr=1-1
</details>

③ Flask公式ドキュメント：https://flask.palletsprojects.com/en/3.0.x/
　なお、「Flask公式ドキュメント」等と検索すると邦訳版が出てきますが、そちらはバージョンが古いようで、つよつよの方によるとこちらを参照すべきとのことです。

④ Flask + SQLAlchemyプロジェクトを始める手順 @shirakiya(Yoshihiko Shiraki)さんQiita　
https://qiita.com/shirakiya/items/0114d51e9c189658002e

⑤ Poetryをサクッと使い始めてみる @ksato9700 さんQiita
https://qiita.com/ksato9700/items/b893cf1db83605898d8a

⑥ [初心者向け] Poetry入門!インストール方法から使い方、コマンド、パッケージの管理方法まで徹底解説　@shun198 さんQiita
https://qiita.com/shun198/items/97483a227f288ad58112

⑦ 開発系エンジニアのためのDocker絵とき入門　【秀和システム】　鈴木　亮（著）

<details><summary>Amazonリンク</summary>

https://www.amazon.co.jp/%E9%96%8B%E7%99%BA%E7%B3%BB%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEDocker%E7%B5%B5%E3%81%A8%E3%81%8D%E5%85%A5%E9%96%80-%E9%88%B4%E6%9C%A8%E4%BA%AE/dp/4798071501/ref=sr_1_2_sspa?crid=332EB8M04UXE0&dib=eyJ2IjoiMSJ9.tYhpgAFyKlCQi2UXS0PciDZVwzPhkFt0Un4-hx4udn0tcCWfBDET2_DNtwa9s9H6BEcWGYo08D5KOLo5D6pM_9oMAXm-sfXPKxO2wnvvaLgTVjQ886BdpPCv7TqgKTeVy4hbGIxYn-zYHNDQeLQsCrIUEbTZYlh1cvPeeUBFhR5b47CsTcOxImzkB6sPBuzLx5Nfzr5yTf7Q0BOykAuch2dwwWccsXt2O6tgYrFUgfVM8g8zWt_ZiIzSjiMfIVsM_D3CBHhjRO6D-puIKrgZO_JrNuGflVj6a8XLmxETu7A.3OFce1Esh_Oa_-KwtyINfrnDb6EF7BIZmkvV0UkYBX0&dib_tag=se&keywords=%E9%96%8B%E7%99%BA%E7%B3%BB%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEdocker%E7%B5%B5%E3%81%A8%E3%81%8D%E5%85%A5%E9%96%80&qid=1724853635&sprefix=%E9%96%8B%E7%99%BA%E7%B3%BB%2Caps%2C214&sr=8-2-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1
</details>

※Linuxコマンドの学習の必要性を感じるキッカケとなった本。手を動かしてコンテナを作っては壊して学ぶ