2017-09-22 4 views
3

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

Antwort

2

Platz an der Spitze des tensorflow Skript, bevor es importiert wird.

import os 

#export pbr version for tensorflow user 
os.environ["PBR_VERSION"]='3.1.1' 

oder was auch immer Version pbr -v gibt Ihnen