Ubunts環境構築からpythonファイルをexe化する手順

##はじめに
Ubuntsは使用したことがなく、Hyper-Vとはなんぞやって部分から入りました。
そこから、pythonをexe化する機会は世間的にあまり多くないのか様々な情報に当たりましたがexe化することができたのでまとめます。

---
__環境__
windows10 64bit
ubunts 20.04
python 3.7.7
pip 20.2.4
pyenv version 2020.11.15
pyinstaller 4.0


---

__Hyper-vとは__
windows 社が無償で提供する仮想化技術の一つ。
windows8～やwindows serverに標準搭載している機能。
サーバマネージャーから機能をONすることで使用可能となる。
詳細はこちら__[Hyper-Vとは？](https://www.school.ctc-g.co.jp/columns/microsoft/microsoft01.html)__
-


- [Windows10のHyper-V上でUbuntuを動かす](https://blackbird-blog.com/hyper-v-ubuntu-setup)
-ubuntsの構築はこの方の記事を見て構築すれば問題ないと思います。
ネットワークの設定は後程、Hyper-Vマネージャーの作成した仮想マシンの設定にて、’ネットワークアダプター’を新しい仮想スイッチに設定する必要があります。



## ubuntsの最新のパッケージ情報を取得

    sudo apt update

## ubuntsのパッケージ情報を更新

    sudo apt upgrade

## pyenvを使用するためにもろもろインストール

    sudo apt install -y build-essential # c++コンパイラ
    sudo apt install -y libffi-dev
    sudo apt install -y libssl-dev # openssl
    sudo apt install -y zlib1g-dev
    sudo apt install -y liblzma-dev
    sudo apt install -y libbz2-dev libreadline-dev libsqlite3-dev # bz2, readline, sqlite3
    sudo apt install -y git

## pyenvのパッケージのインストール

    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    
# .bashrcの更新
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(pyenv init -)"' >> ~/.bashrc
    source ~/.bashrc

## pythonのインストール

    pyenv install 3.7.7


## デフォルトだと3.8.5を使用していたので今回の3.7.7をデフォルトで使用したいため

    echo "3.7.7" > .python-version

   
## pipenvのインストール

    pip install pipenv

 > WARNING: You are using pip version 19.2.3, however version 20.2.4 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

こいつが出てくるとおもうので

    pip install --upgrade pip

## pipenvを初期設定

     pipenv　install
　
>Pythonで開発するときに，プロジェクト毎のパッケージ管理や仮想環境の構築を簡単に自動で行ってくれるツール。パッケージのインストールならpip，仮想環境の構築ならvirtualenv（venv）を使えば対応できますが，pipenvはそれらをまとめてより簡単に扱えるようにサポートしてくれます．

>Using /usr/bin/python3.8 to create virtualenv・・・

>×Failed creating virtual enviroment
私の場合は上記のエラーが出てきました。
Pythonのバージョンが違うみたいなので


     pipenv　--python 3.7

これで使用するPythonのversionを指定しました。

## activateする

     pipenv　shell
　
仮想環境にこれで入れました


## パッケージが必要な場合は導入する

     pipenv install argparse
     pipenv install argparse==1.4.*
#Pipfileに入っていることを確認
     cat Pipfile

#pyinstallerの導入
     pip install pyinstaller

#pipenvにてpyinstallerを導入
     pipenv install pyinstaller

exe化したいファイルが存在しているディレクトリに移動し、

#exe実行
     LD_LIBRARY_PATH=/home/namae/.pyenv/bin/pyenv pyinstaller test.py

    
これでエラーが吐かれました。

     OSError: Python library not found: libpython3.7m.so.1.0 libpython3.7mu.so.1.0 libpython3.7.so.1.0 libpython3.7m.so
    This would mean your Python installation doesn't come with proper library files.
    This usually happens by missing development package, or unsuitable build parameters of Python installation.
    * On Debian/Ubuntu, you would need to install Python development packages
      * apt-get install python3-dev
      * apt-get install python-dev
    * If you're building Python by yourself, please rebuild your Python with `--enable-shared` (or, `--enable-framework` on Darwin)

**環境変数PYTHON_CONFIGURE_OPTSに、--enable-sharedオプションをセットせずにpyenv installしていると発生します。**

     LD_LIBRARY_PATH=/home/namae/.pyenv/versions/3.7.7 pyenv install
     LD_LIBRARY_PATH=/home/namae/.pyenv/versions/3.7.7 pyinstaller test.py --onefile
     
     Building EXE from EXE-00.toc completes successfully.

exeができました！！

#動作確認
     cd dist
     ./test
    hello

起動してます、OKです！

フォルダ大きい問題がありますが
私がexe化したいファイルだとそこまで大きく（約12MBくらいはありましたが）
できました。




 










---
__参考にした記事__

- __[Debian＋anyenv(pyenv)＋pipenvで環境構築](https://7me.nobiki.com/2018/08/24/pyenv-pipenv-python-environments/)__
- __[Pyinstallerで実行可能形式にするまでのメモ](https://7me.nobiki.com/2018/09/13/pyinstaller-pyenv-oserror-typeerror-library-not-found/)__ 

- __[ubuntu 20.04 に pyenv をインストールする話【2020/07/18更新】](https://qiita.com/neruoneru/items/1107bcdca7fa43de673d)__