Имя compose не определяется из scikit-изображения после сборки cx_freeze

Я пытаюсь создать exe через Cx_Freeze, скрипты python запускаются без проблем перед сборкой.

После успешной компиляции и сборки Cx_Freeze у меня возникли проблемы с загрузкой модуля cytoolz, где написано NameError: name 'compose' не найдено.

Кажется, что эта ошибка возникает из-за модуля scikit-image после цепочки вызовов ошибок:

enter image description here

До сих пор, следуя потенциальному разрешению, аналогичному этой ошибке, я пытался удалить / переустановить cytoolz с последующим обновлением conda, предложенным hafarazi (https://github.com/conda/conda/issues/3441). Однако безуспешно.

Мой setup.py:

from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need
# fine tuning.
# When using flask-sqlalchemy add sqlite3.dll to include_files

import os.path
import scipy
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
print(PYTHON_INSTALL_DIR)
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')


#This fix the issue where Scipy module _ni_support can't be properly imported during build.
includefiles_list=[]
scipy_path = os.path.dirname(scipy.__file__)
includefiles_list.append(scipy_path)


buildOptions = dict(
    packages = ['flask','requests','sys','Jinja2','idna','encodings', 'asyncio','numpy', 'engineio','eventlet'],
    excludes = [],
    include_files=['templates/', 'static/', scipy_path]
)

import sys
base = 'Win32GUI' if sys.platform=='win32' else None
# base = 'Console'

executables = [
    Executable('runserver.py', base=base)
]

setup(name='Test',
      version = '1.0',
      description = '',
      options = dict(build_exe = buildOptions),
      executables = executables)

#After build:
#rename Jinja folder with jinja if module jinja is not found error encoutnered

Моя платформа: Windows 10 Python 3.6

Есть ли предложения по возможному пути решения этой проблемы?

У меня нет опыта работы с cx_freeze, но я столкнулся с аналогичными проблемами с PyInstaller, и мне пришлось добавить пути к hidden_imports. cx_freeze может иметь аналогичное средство. См. Этот пример из CellProfiler: github.com/CellProfiler/distribution/blob/master/windows/…

Juan 14.09.2018 03:01

Скопируйте и вставьте сообщение об ошибке и сценарий установки в виде текста в свое сообщение. Вы можете отформатировать их как блоки кода, сделав отступ с 4 пробелами.

jpeg 14.09.2018 07:46

Вы пробовали добавить scipy и cytoolz в список packages в buildOptions?

jpeg 14.09.2018 20:40

В папке build \ exe.win-amd64-3.6 \ lib я вижу cytoolz и scipy, мне все еще нужно добавить их в buildOptions?

user2386301 16.09.2018 04:22

Я бы определенно попробовал это, да. Если я правильно понимаю ваше сообщение об ошибке, cytoolz можно найти в программе сборки, но его части (по крайней мере, функция compose) не могут. Вы также можете попробовать добавить cytoolz.functoolz (модуль, определяющий compose) в список packages.

jpeg 19.09.2018 20:58
0
5
805
1

Ответы 1

Проблема в том (по крайней мере, я думаю), что 'compose' неправильно определен в cytoolz \ __ init__.py:

from .itertoolz import *

from .functoolz import *

from .dicttoolz import *

from .recipes import *

from .compatibility import map, filter

# from . import sandbox

from functools import partial, reduce

sorted = sorted

# Aliases
comp = compose #<-- HERE!

# Always-curried functions
flip = functoolz.flip = curry(functoolz.flip)
memoize = functoolz.memoize = curry(functoolz.memoize)

functoolz._sigs.update_signature_registry()

from ._version import __version__, __toolz_version__

Кто-то, видимо, подумал, что было бы неплохо использовать from ... import *. Я работаю над той же проблемой прямо сейчас и дам вам знать, если я нашел способ решить эту проблему.

Обновлено: Просматривая functoolz, я нашел compose. Исправил эту ошибку, добавив (в cytoolz\__init__.py)

import functoolz as futo

и замена

comp = compose

с участием

comp = futo.compose

Другие вопросы по теме