ubuntu で pyinstaller を使ったらエラーが出た困った時の対応方法をメモします。
症状
ubuntu の環境で pyinstaller を使ったら以下のエラーが出てきました。
エラーメッセージ
pyinstaller コマンドを実行すると以下のエラーメッセージが表示されます。
$ pyinstaller xxxxx.py --onefile ・ ・ ・ ・ OSError: Python library not found: libpython3.9mu.so.1.0, libpython3.9m.so.1.0, libpython3.9.so.1.0, libpython3.9.so, libpython3.9m.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 インストールのビルドパラメーターが不適切なために起こってますとのこと...
どうやら"--enable-shared"というオプションをつけて Python を再構築してくれとのこと...
対応したこと
実行環境確認
cat コマンドでOSのバージョンを確認してみます。
$ cat /etc/os-release NAME="Ubuntu" VERSION="20.04.2 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.2 LTS" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=focal UBUNTU_CODENAME=focal
回避策
以下のコマンドで python のバージョンを確認します。
$ pyenv versions system 3.7.8 * 3.9.6 (set by /home/{xxx}/xxxxx/.python-version)
とりあえず問題のあったバージョン(3.9.6)に、pyenv でオプションに「--enable-shared」をつけて pyton を再インストールしました。
$ PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.9.6 pyenv: /home/{xxx}.anyenv/envs/pyenv/versions/3.9.6 already exists continue with installation? (y/N) y Downloading Python-3.9.6.tar.xz... -> https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz Installing Python-3.9.6... Installed Python-3.9.6 to /home/{xxx}/.anyenv/envs/pyenv/versions/3.9.6
再度 pyinstaller 実行
再度 pyinstaller コマンドを実行したところ処理が成功しました。
$ pyinstaller xxxxx.py --onefile 45 INFO: PyInstaller: 4.5.1 46 INFO: Python: 3.9.6 48 INFO: Platform: Linux-5.4.0-77-generic-x86_64-with-glibc2.31 (省略) 23413 INFO: checking EXE 23413 INFO: Building EXE because EXE-00.toc is non existent 23413 INFO: Building EXE from EXE-00.toc 23427 INFO: Appending archive to ELF section in EXE /home/{xxx}/xxxxx/dist/xxxxx 23666 INFO: Building EXE from EXE-00.toc completed successfully.