Dies ist eine Aufzeichnung zum Generieren einer ausführbaren Datei aus Python-Code mit pyinstaller auf einem Mac.
print_sys_path.py
import sys
print(sys.path)
print(f"__name__ = {__name__}")
print(f"__file__ = {__file__}")
Mit dem mit pip installierten Pyinstaller habe ich Folgendes auf meinem Terminal ausgeführt:
pyinstaller print_sys_path.py --onefile
Ich habe eine Python-Bibliothek nicht gefunden Fehler wie unten.
71 INFO: PyInstaller: 3.6
71 INFO: Python: 3.7.4
83 INFO: Platform: Darwin-19.2.0-x86_64-i386-64bit
(Weggelassen)
OSError: Python library not found: libpython3.7m.dylib, .Python, libpython3.7.dylib, Python
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)
Verwenden Sie "--enable-shared" als Option, wenn Sie Python mit pyenv installieren. Ich habe auf meinem Terminal Folgendes getan:
PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.7.4
Folgendes wird angezeigt und 3.7.4 wurde überschrieben.
pyenv: /Users/username/.pyenv/versions/3.7.4 already exists
continue with installation? (y/N) y
python-build: use [email protected] from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.4.tar.xz...
-> https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
Installing Python-3.7.4...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.7.4 to /Users/username/.pyenv/versions/3.7.4
Überprüfen Sie den verwendeten Python.
$ pyenv global
3.7.4
Als ich pyinstaller startete, bekam ich immer noch die Python-Bibliothek nicht gefunden Fehler wie unten.
$ pyinstaller print_sys_path.py --onefile
(Weggelassen)
OSError: Python library not found: Python, libpython3.7.dylib, .Python, libpython3.7m.dylib
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)
Ich wurde beschimpft, dass die .dylib-Datei nicht gefunden werden konnte. Verwenden Sie daher den Befehl find, um den Speicherort wie unten gezeigt zu finden.
find $HOME -name 'libpython3*.dylib' 2> /dev/null
Ich habe den Speicherort von libpython3.7m.dylib in der Umgebungsvariablen LD_LIBRARY_PATH angegeben und ausgeführt, aber der Fehler "Python-Bibliothek nicht gefunden" blieb wie unten gezeigt.
$ LD_LIBRARY_PATH=/Users/username/.pyenv/versions/3.7.4/lib pyinstaller print_sys_path.py --onefile
(Weggelassen)
OSError: Python library not found: .Python, Python, libpython3.7m.dylib, libpython3.7.dylib
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)
Verwenden Sie "--enable-framework" als Option, wenn Sie Python mit pyenv installieren. Ich habe auf meinem Terminal Folgendes getan:
PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.7.4
Folgendes wird angezeigt und 3.7.4 wurde überschrieben.
pyenv: /Users/username/.pyenv/versions/3.7.4 already exists
continue with installation? (y/N) Y
python-build: use [email protected] from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.4.tar.xz...
-> https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
Installing Python-3.7.4...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.7.4 to /Users/username/.pyenv/versions/3.7.4
Als ich pyinstaller startete, bekam ich die folgende Fehlermeldung "pyinstaller fehlt".
$ LD_LIBRARY_PATH=/Users/username/.pyenv/versions/3.7.4/lib pyinstaller print_sys_path.py --onefile
-bash: /Users/username/.pyenv/shims/pyinstaller: No such file or directory
Als ich versuchte, pyinstaller neu zu installieren, wurde mir gesagt, dass es "bereits" war, wie unten gezeigt.
$ pip install pyinstaller
Requirement already satisfied: pyinstaller in /Users/username/.pyenv/versions/3.7.4/lib/python3.7/site-packages (3.6)
Requirement already satisfied: altgraph in /Users/username/.pyenv/versions/3.7.4/lib/python3.7/site-packages (from pyinstaller) (0.17)
Requirement already satisfied: setuptools in /Users/username/.pyenv/versions/3.7.4/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pyinstaller) (40.8.0)
Requirement already satisfied: macholib>=1.8 in /Users/username/.pyenv/versions/3.7.4/lib/python3.7/site-packages (from pyinstaller) (1.14)
Ich verstehe nicht warum! Aufgrund von Versuch und Irrtum konnte ich pyinstaller neu installieren, indem ich die folgenden Schritte ausführte: Deinstallieren → Installieren.
$ pip uninstall pyinstaller
Uninstalling PyInstaller-3.6:
Would remove:
/Users/username/.pyenv/versions/3.7.4/lib/python3.7/site-packages/PyInstaller-3.6.dist-info/*
/Users/username/.pyenv/versions/3.7.4/lib/python3.7/site-packages/PyInstaller/*
Proceed (y/n)? Y
Successfully uninstalled PyInstaller-3.6
$ pip install pyinstaller
Processing /Users/username/Library/Caches/pip/wheels/62/fe/62/4c0f196d1e0dd689e097449bc81d7d585a7de7dd86b081b80b/PyInstaller-3.6-cp37-none-any.whl
Requirement already satisfied: setuptools in /Users/username/.pyenv/versions/3.7.4/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pyinstaller) (40.8.0)
Requirement already satisfied: macholib>=1.8 in /Users/username/.pyenv/versions/3.7.4/lib/python3.7/site-packages (from pyinstaller) (1.14)
Requirement already satisfied: altgraph in /Users/username/.pyenv/versions/3.7.4/lib/python3.7/site-packages (from pyinstaller) (0.17)
Installing collected packages: pyinstaller
Successfully installed pyinstaller-3.6
Als ich pyinstaller wie unten gezeigt erneut startete, wurde eine ausführbare Datei im Verzeichnis dist generiert. Ich habe LD_LIBRARY_PATH angegeben, aber es scheint zu funktionieren, auch wenn ich es nicht angegeben habe.
LD_LIBRARY_PATH=/Users/username/.pyenv/versions/3.7.4/lib pyinstaller print_sys_path.py --onefile
Startete die generierte ausführbare Datei (erfolgreich).
dist/print_sys_path
['/var/folders/kc/blch89657dv8zrzlxjljz6f40000gr/T/_MEInZMCQo/base_library.zip', '/var/folders/kc/blch89657dv8zrzlxjljz6f40000gr/T/_MEInZMCQo']
__name__ = __main__
__file__ = print_sys_path.py
Das erste --enable-shared ist fehlgeschlagen, aber als ich es erneut mit --enable-shared installiert habe, war es erfolgreich, also werde ich es aufzeichnen.
Python mit pyenv installieren:
$ PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.7.4
pyenv: /Users/username/.pyenv/versions/3.7.4 already exists
continue with installation? (y/N) y
python-build: use [email protected] from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.4.tar.xz...
-> https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
Installing Python-3.7.4...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.7.4 to /Users/username/.pyenv/versions/3.7.4
Starten Sie pyinstaller:
pyinstaller print_sys_path.py --onefile
Starten Sie die generierte ausführbare Datei:
$ dist/print_sys_path
['/var/folders/kc/blch89657dv8zrzlxjljz6f40000gr/T/_MEIf6CW7m/base_library.zip', '/var/folders/kc/blch89657dv8zrzlxjljz6f40000gr/T/_MEIf6CW7m']
__name__ = __main__
__file__ = print_sys_path.py
Probieren Sie es mit pipenv. Starten Sie pyinstaller:
pipenv run pyinstaller print_sys_path.py --onefile
Starten Sie die generierte ausführbare Datei:
$ dist/print_sys_path
['/var/folders/kc/blch89657dv8zrzlxjljz6f40000gr/T/_MEIPYS34b/base_library.zip', '/var/folders/kc/blch89657dv8zrzlxjljz6f40000gr/T/_MEIPYS34b']
__name__ = __main__
__file__ = print_sys_path.py
Wenn Python mit pyenv überschrieben wird, muss wahrscheinlich auch das mit pip installierte neu installiert werden (deinstallieren → installieren). Lösung 1 Ich habe Python überschrieben und installiert, aber pyinstaller hat das zuvor enthaltene verwendet, sodass ich denke, dass der gleiche Fehler aufgetreten ist.
Recommended Posts