環境
1 2 3 4 5 6 7 8
| $ pyinstaller -v 3.4
$ pyenv version 3.7.0 (set by PYENV_VERSION environment variable)
$ pipenv --version pipenv, version 2018.7.1
|
環境づくり
pyenvのインストール時に、PYTHON_CONFIGURE_OPTS="--enable-shared"
オプションが必要です
1 2 3 4 5 6 7
| // pyenv $ cd /path/to/project/ $ echo "3.7.0" > .python-version $ PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install
// pipenv $ pipenv install pyinstaller
|
スクリプト作成: hello
1 2 3 4 5 6 7
| $ cat test.py
def main(): print("hello")
if __name__ == '__main__': main()
|
実行: PyInstaller
実行時に、環境変数 LD_LIBRARY_PATH
の設定が必要です
1
| $ LD_LIBRARY_PATH=/home/vagrant/.anyenv/envs/pyenv/versions/3.7.0/lib pyinstaller test.py
|
実行してみる
dist/test/
ディレクトリ内に実行ファイルが生成されています
1 2 3
| $ cd ./dist/test/ $ ./test hello
|
エラー: OSError: Python library not found: libpython3.7.so.1.0, libpython3.7m.so.1.0, libpython3.7mu.so.1.0
環境変数PYTHON_CONFIGURE_OPTS
に、--enable-shared
オプションをセットせずにpyenv install
していると発生します。
1 2 3
| $ PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install pyenv: /home/vagrant/.anyenv/envs/pyenv/versions/3.7.0 already exists continue with installation? (y/N) y
|
エラー: TypeError: expected str, bytes or os.PathLike object, not NoneType
環境変数LD_LIBRARY_PATH
をセットせずに、pyinstaller
を実行すると発生します。
1
| $ LD_LIBRARY_PATH=/home/vagrant/.anyenv/envs/pyenv/versions/3.7.0/lib pyinstaller test.py
|
環境変数系は面倒なので、.envやdockerのenvironmentなどに設定しておくとよいかも。