Pythonの始め方

# Summary
[最初に入れるやつら](https://qiita.com/y_marui/items/0ce03b01de0e7ea02de1)に付け足す`python`のパートが長いので分離。 

MacではZshを、WindowsではPowerShell。
Python管理は、Macでは[pyenv](https://github.com/pyenv/pyenv)、Windowsでは[pyenv-win](https://github.com/pyenv-win/pyenv-win)。
パッケージ管理
* 基本的に`pip`+`pip-review`
* コマンド系は、`pipx`
* プロジェクトは、`poetry`

Macではエスケープキーが<code>\\</code>だが、Windowsでは<code>`</code>。
ここでは<code>\\</code>に統一するので、Windowsの場合は適宜置換する。

以前は、Anaconda/Minicondaを使っていたが、
M1 MacになってMKLの恩恵も受けれないし、
Anacondaの商業利用の制限も怖いしでPyPiに戻ってきた。

# `python`
`pyenv`と`pipx`、`gibo`はHomebrewとかで入れとく。
```zsh
pyenv install 3.x.x
pipx install \
    poetry \
    pip-search
poetry config virtualenvs.in-project true
```

# Package
```zsh
pip install \
    astropy \
    autopep8 \
    black \
    conda-build \
    docopt \
    dropbox \
    ipympl \
    ipython \
    isort \
    jupyter \
    jupyterlab \
    jupyterlab_code_formatter \
    matplotlib \
    nidaqmx-python \
    nodejs \
    numpy \
    pandas \
    pdf2image \
    pre-commit \
    pycodestyle \
    pydocstyle \
    pyperclip \
    pyvisa-py \
    scipy \
    selenium \
    timeout-decorator \
    tqdm \
    mpl_interactions \
    nbmerge
``` 

# Jupyter Lab
```zsh
jupyter labextension install \
    @jupyter-widgets/jupyterlab-manager \
    @ryantam626/jupyterlab_code_formatter \
    jupyter-matplotlib
jupyter serverextension enable --py jupyterlab_code_formatter
```
-   [Jupyter nbextensions - Qiita](https://qiita.com/u1and0/items/3b17b2aaac9fde219bda#nbextensions-dashboard-tab)

# Jupyter Notebook with Mathematica
-   [Wolfram Engine を導入して Jupyter-notebook で動かすまで - Qiita](https://qiita.com/Mizuto_Kadowaki/items/0f8ac51c7c00303f456e)
-   [Wolfram 言語が使えるようになった！（mac 編, ビッグバネイト） - Qiita](https://qiita.com/TsuMakoto/items/d17ccc6d9974337b55db)
-   [実質無料で Wolfram 言語(Mathematica の中身)が使えるようになったらしい - Qiita](https://qiita.com/Y_F_Acoustics/items/662709fa6f31443a3e71)
-   [Jupyter Notebook Viewer](https://nbviewer.jupyter.org/github/genkuroki/msfd28/blob/master/Free%20Wolfram%20Engine.ipynb#Wolfram-Language-kernel-for-Jupyter-notebooks-%E3%81%AE%E7%B4%B0%E3%81%8B%E3%81%AA%E4%BF%AE%E6%AD%A3)

# Launcher for JupyterLab
JupyterLabは基本的にいつも起動しておく: [y\-marui/keep\-alive\-jupyter](https://github.com/y-marui/keep-alive-jupyter)。
```
ghq get https://github.com/y-marui/keep-alive-jupyter.git
g keep-alive-jupyter
ln -s $(pwd)/com.bill.jupyter.plist ~/Library/LaunchAgents/com.bill.jupyter.plist
launchctl load ~/Library/LaunchAgents/com.bill.jupyter.plist
```

## CUI
[nbopen](https://github.com/takluyver/nbopen)が良さそう。

## GUI
Make Jupyter `Launcher.app` with Automater. Run zsh script with pass input as arguments.
```zsh
nbopen_path=`which nbope`
if [[ -s "$jupyter_launcher_path" ]]; then
	$nbopen_path "$@"
fi
```

# Update
Add `update` to `pyenv`
```zsh
git clone https://github.com/pyenv/pyenv-update.git $(pyenv root)/plugins/pyenv-update
```
Command to update
```zsh
pyenv update
pip-review --auto
jupyter labextension update --all
```
-   [bitWalk's: 【備忘録】pip\-review で一括アップデート](https://bitwalk.blogspot.com/2019/06/pip-review.html)

# Package開発
自作Packageは、使いまわすこともあるので、雑でも良いからGitHubとかにあげとく。
パッケージ名を`PACKAGE`として進める。
```zsh
ghq get PACKAGE
g PACKAGE
```

`poetry`
```
poetry init
poetry install
poetry shell
```
次からは、
```
poetry shell
```
だけでで良い。
JupyterLabのカーネルとして使う場合は、個別に追加する必要がある。
名前`package-name`と表示名`Package Name`を分けることができる。
```
epo_name="package-name"
disp_name="Package Name"
ipython kernel install --user --name="${repo_name}" --display-name="${disp_name}" --env PYTHONPATH "\${PYTHONPATH}:$(pwd)"
```
JupyterのKernelを確認。
```
jupyter kernelspec list
```
プロジェクトがひと段落したらJupyterLabのカーネルから削除。
```
jupyter kernelspec uninstall "${repo_name}"
```
- [JupyterからPoetryでインストールしたライブラリを呼び出してみた \| gadgetlunatic](https://gadgetlunatic.com/post/use-poetry-along-with-jupyter/)

新しいパッケージを作るときは、`ipykernel`と`pytest`をdevelop用に入れとくといい。
```
poetry add -D ipykernel pytest
```
普通の依存は`poetry add`、develop用は`poetry add　-D`で追加する。

# References
-   [Jupyter Notebook (\*.ipynb)をダブルクリックで開くための Mac アプリケーション - Qiita](https://qiita.com/astropenguin/items/6c8dbfbbdce5b688129a)
-   [tmux 自動化の Python スクリプトを作成した - Qiita](https://qiita.com/Tocyuki/items/258151f6ac89465a0c64)
-   [Python の subprocess - Qiita](https://qiita.com/tanabe13f/items/8d5e4e5350d217dec8f5)
-   [Tmux Cheat Sheet & Quick Reference](https://tmuxcheatsheet.com/)
-   [pyenv-win/pyenv-win: pyenv for Windows. pyenv is a simple python version management tool. It lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.](https://github.com/pyenv-win/pyenv-win)