Имя Compose не определено из Scikit-образа после сборки Cx_Freeze - PullRequest
0 голосов
/ 13 сентября 2018

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

После того, как Cx_Freeze скомпилирован и собран успешно, у меня возникают проблемы с загрузкой модуля cytoolz, где он говорит NameError: имя '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

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

1 Ответ

0 голосов
/ 08 октября 2018

Проблема (по крайней мере, я думаю) в том, что '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
...