Pyinstaller, ошибка отложенного загрузчика tenorflow.contrib во время выполнения - PullRequest
0 голосов
/ 31 мая 2018

Используя pyinstaller 3.3.1 в Python 3.5 32bit, я преобразовал приложение .py в .exe

Приложение использует тензор потока и в какой-то момент выдает

Traceback (most recent call last):
  File "face_classify.py", line 140, in <module>
    loaded_model = load_c3d.c3d_model_obj(user_case)
  File "load_c3d.py", line 80, in __init__
    'wc1': _variable_with_weight_decay('wc1', [3, 3, 3, 3, 64], 0.0005),
  File "load_c3d.py", line 47, in _variable_with_weight_decay
    var = _variable_on_cpu(name, shape, tf.contrib.layers.xavier_initializer())
  File "site-packages\tensorflow\__init__.py", line 35, in __getattr__
  File "importlib\__init__.py", line 126, in import_module
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'tensorflow.contrib'

Это происходит, когдазапустить .exe.Похоже, проблема пути к файлу.__init__.py tenorflow делает это

# Lazily import the `tf.contrib` module. This avoids loading all of the
# dependencies of `tf.contrib` at `import tensorflow` time.
  def __getattr__(self, item):
    global contrib
    # Replace the lazy loader with the imported module itself.
    import importlib  # pylint: disable=g-import-not-at-top
    contrib = importlib.import_module('tensorflow.contrib')
    return getattr(contrib, item)

Мне кажется, что эта ленивая загрузка не может быть отслежена pyinstaller.Однако папка contrib правильно расположена внутри моей установки на python: C:\Python35\Lib\site-packages\tensorflow\contrib Как я могу решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 05 июня 2019

вы можете добавить 'tenorflow.contrib' в --hidden-import

pyinstaller -F face_classify.py --hidden-import tensorflow.contrib

0 голосов
/ 18 июля 2019

Надеюсь, что это поможет любому, имеющему

`ModuleNotFoundError: No module named 'sklearn.*'`

`ModuleNotFoundError: No module named 'h5py.*'`

Во время или после сборки pyinstaller

Пример, если вы получаете сообщение об ошибке h5py

После запуска pyinstaller myscript.py amyscript.spec генерируется

Зайти внутрь myscript.spec

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(['myscript.py'],
         binaries=None,
         datas=[],
         hiddenimports=[],
         hookspath=[],
         runtime_hooks=[],
         excludes=[],
         win_no_prefer_redirects=False,
         win_private_assemblies=False,
         cipher=None)
# ... rest of a file untouched

Добавить

from PyInstaller.utils.hooks import collect_submodules

hidden_imports = collect_submodules('h5py')

и

hiddenimports=hidden_imports,

Как это

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

from PyInstaller.utils.hooks import collect_submodules

hidden_imports = collect_submodules('h5py')

a = Analysis(['myscript.py'],
         binaries=None,
         datas=[],
         hiddenimports=hidden_imports,
         hookspath=[],
         runtime_hooks=[],
         excludes=[],
         win_no_prefer_redirects=False,
         win_private_assemblies=False,
         cipher=None)
# ... rest of a file untouched

Затем сохраните myscript.spec и выполните команду pyinstaller myscript.spec

Кредит 9dogs Файл, созданный Pyinstaller, не может загрузить модель keras nn

0 голосов
/ 04 июня 2018

В моем случае, вы можете добавить 'tenorflow.contrib' в скрытый импорт из файла .spec.Однако после исправления импорта я столкнулся с другой проблемой, но сначала вы можете попробовать это хотя бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...