Importerror: невозможно импортировать имя linearndinterpolator

Я написал программу на Python 3.6.2, которую пытаюсь заморозить для распространения с помощью cx_Freeze. Но я получаю странную ошибку при попытке запустить получившийся исполняемый файл (моя базовая программа использует pyLDAvis.sklearn). Ошибка воспроизводится ниже:

Traceback (most recent call last):

File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run
    module.run()
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run
    exec(code, m.__dict__)
  File "MYPROGRAM.py", line 1474, in <module>
    import pyLDAvis.sklearn
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\pyLDAvis\__init__.py", line 44, in <module>
    from ._display import *
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\pyLDAvis\_display.py", line 13, in <module>
    from ._prepare import PreparedData
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\pyLDAvis\_prepare.py", line 15, in <module>
    from scipy.stats import entropy
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\stats\__init__.py", line 345, in <module>
    from .stats import *
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\stats\stats.py", line 171, in <module>
    from . import distributions
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\stats\distributions.py", line 10, in <module>
    from ._distn_infrastructure import (entropy, rv_discrete, rv_continuous,
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 16, in <module>
    from scipy.misc import doccer
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\misc\__init__.py", line 68, in <module>
    from scipy.interpolate._pade import pade as _pade
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\interpolate\__init__.py", line 187, in <module>
    from .ndgriddata import *
  File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\interpolate\ndgriddata.py", line 11, in <module>
    from .interpnd import LinearNDInterpolator, NDInterpolatorBase, \
ImportError: cannot import name 'LinearNDInterpolator'

Параметры исполняемого файла для моего скрипта cx_freeze приведены ниже:

build_exe_options = {
                        "packages": ["os","textwrap","msvcrt","warnings","time","datetime","platform","sklearn","operator","nltk.tokenize","stop_words","pandas","nltk.stem.porter","sklearn.feature_extraction.text","sklearn.decomposition","progressbar","numpy","packaging","asyncio",
                        ], 

                        "includes": ["appdirs","packaging.version","packaging.specifiers","packaging.requirements","pyLDAvis.sklearn","pyLDAvis.urls","scipy.sparse.csgraph._validation"],

                        "excludes" : ["tkinter","sqlite3"],

                        "include_msvcr" : True
                    }

Кажется, я не могу найти какую-либо комбинацию scipy.interpolate или scipy.interpolate.interpnd, чтобы добавить параметры сборки, которые позволяют этой работе - я постоянно получаю ошибку «не могу импортировать имя 'LinearNDInterpolator'». Переустановка scipy не помогает.

Кто-нибудь может посоветовать? Я просто обречен не заморозить свой код?

вы используете Anaconda?

Abdul Rehman 26.10.2018 05:32
1
1
1 337
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Вы пробовали добавить

    import scipy.interpolate.interpnd
    

    в вашей базовой программе (не в скрипте установки)? Что тогда происходит?

  2. Согласно опыту, который я сделал до сих пор, нужно добавить scipy в список packages, чтобы позволить cx_Freeze правильно включить его. Но тогда еще нужно добавить scipy.spatial.cKDTree в список excludes из-за Эта проблема. Таким образом, попробуйте использовать следующие параметры в сценарии установки:

    build_exe_options = {
                    "packages": ["os","textwrap","msvcrt","warnings","time","datetime","platform","sklearn","operator","nltk.tokenize","stop_words","pandas","nltk.stem.porter","sklearn.feature_extraction.text","sklearn.decomposition","progressbar","numpy","packaging","asyncio","scipy"
                    ], 
    
                    "includes": ["appdirs","packaging.version","packaging.specifiers","packaging.requirements","pyLDAvis.sklearn","pyLDAvis.urls","scipy.sparse.csgraph._validation"],
    
                    "excludes" : ["tkinter","sqlite3","scipy.spatial.cKDTree"],
    
                    "include_msvcr" : True
                }
    
  3. Дополнительное замечание: опция build_exe"include_msvcr": True, похоже, не работает с cx_Freeze версий 5.0.2, 5.1.1 и 6.0b1. См. Эта проблема, мой пост там (jpeg13) содержит некоторые подробности. Возможно, вам придется добавить библиотеки DLL MSVCR вручную, используя опцию build_exeinclude_files.

Красивый! # 1 исправил это. Я просто предположил, что interpnd был импортирован с остальной частью scipy, но, очевидно, он должен быть явно вызван. # 2 также исправлена ​​ошибка, которая возникла после, так что спасибо вам и за это.

sw85 26.10.2018 19:12

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