Ich verteile ein Python-Programm, das Tensorflow enthält. Unter OSX, Python 2.7, habe ich keine Fehler beim Laden von Bibliotheken und beim Ausführen von Tensorflow. Wenn Sie pyinstaller verwenden, um eine ausführbare Datei zu erstellen, schlägt sie mit einem PBR-Fehler fehl.Wie packt man Tensorflow mit Pyinstaller auf MacOSX?
Wir können dieses Problem auf einen einfachen (hoffentlich reproduzierbaren) Fehler reduzieren.
Hier ist unser Programm. Laden wir einfach Tensorflow und lassen einige Pfadinfos ausdrucken.
tf_check.py
import tensorflow
print(tensorflow.__file__)
Run mit pyinstaller.
Bens-MacBook-Pro:tests ben$ pyinstaller tf_check.py
66 INFO: PyInstaller: 3.3
66 INFO: Python: 2.7.10
78 INFO: Platform: Darwin-16.7.0-x86_64-i386-64bit
79 INFO: wrote /Users/ben/Documents/DeepMeerkat/tests/tf_check.spec
87 INFO: UPX is not available.
Erstellt ohne ein Problem. Der Versuch, den tf_check unter dist laufen/tf_check/
ergibt
Last login: Thu Sep 28 12:54:34 on ttys000
Bens-MacBook-Pro:~ ben$ /Users/ben/Documents/DeepMeerkat/tests/dist/tf_check/tf_check ; exit;
Traceback (most recent call last):
File "tf_check.py", line 1, in <module>
File "/Library/Python/2.7/site-packages/PyInstaller-3.3-py2.7.egg/PyInstaller/loader/pyimod03_importers.py", line 396, in load_module
exec(bytecode, module.__dict__)
File "tensorflow/__init__.py", line 24, in <module>
File "/Library/Python/2.7/site-packages/PyInstaller-3.3-py2.7.egg/PyInstaller/loader/pyimod03_importers.py", line 396, in load_module
exec(bytecode, module.__dict__)
File "tensorflow/python/__init__.py", line 107, in <module>
File "/Library/Python/2.7/site-packages/PyInstaller-3.3-py2.7.egg/PyInstaller/loader/pyimod03_importers.py", line 396, in load_module
exec(bytecode, module.__dict__)
File "tensorflow/python/platform/test.py", line 60, in <module>
File "/Library/Python/2.7/site-packages/PyInstaller-3.3-py2.7.egg/PyInstaller/loader/pyimod03_importers.py", line 396, in load_module
exec(bytecode, module.__dict__)
File "mock/__init__.py", line 2, in <module>
File "/Library/Python/2.7/site-packages/PyInstaller-3.3-py2.7.egg/PyInstaller/loader/pyimod03_importers.py", line 396, in load_module
exec(bytecode, module.__dict__)
File "mock/mock.py", line 71, in <module>
File "pbr/version.py", line 461, in semantic_version
File "pbr/version.py", line 448, in _get_version_from_pkg_resources
File "pbr/packaging.py", line 755, in get_version
Exception: Versioning for this project requires either an sdist tarball, or access to an upstream git repository. It's also possible that there is a mismatch between the package name in setup.cfg and the argument given to pbr.version.VersionInfo. Project name mock was given, but was not able to be found.
[1916] Failed to execute script tf_check
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions...9 completed.
[Process completed]
Einige Systeminformationen
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>> tensorflow.__version__
'1.3.0'
Der gleiche Code ohne Probleme unter Windows funktioniert. Wiederum nur beim Verteilen mit pyinstaller.
Kann jemand ein Beispiel der Verpackung Tensorflow auf OSX zeigen?
EDIT # 1
Nach Tensorflow CUDA GTX 1070 import error
habe ich versucht, in einem sauberen virtuellen env installieren, pip nur tensorflow installieren und pyinstaller installieren pip, keine Besserung.
Ich habe versucht, die PBR-Version vor Bulding pyinstaller tf_check.py, keine Verbesserung zu exportieren.
(env) Bens-MacBook-Pro:tests ben$ echo $PBR_VERSION 3.1.1
(env) Bens-MacBook-Pro:tests ben$ open dist/tf_check/tf_check