Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Scipy和Cython将Python转换为exe时使用cx\u Freeze的AttributeError_Python_Scipy_Cython_Cx Freeze - Fatal编程技术网

使用Scipy和Cython将Python转换为exe时使用cx\u Freeze的AttributeError

使用Scipy和Cython将Python转换为exe时使用cx\u Freeze的AttributeError,python,scipy,cython,cx-freeze,Python,Scipy,Cython,Cx Freeze,我正在使用cx\U Freeze将python脚本转换为exe文件。 不幸的是,在创建exe文件后执行该文件时,我得到了一个AttributeError: AttributeError:类型对象“scipy.interpolate.interpind.array”没有 属性“\uuuu reduce\u cython\uuuuuu” 使用版本: Python:3.7.3 Scipy:1.2.1 赛顿:0.29.7 cx_冻结:5.1.1 我已经将所有使用过的模块升级到最新版本,并搜索错误。我还尝

我正在使用cx\U Freeze将python脚本转换为exe文件。 不幸的是,在创建exe文件后执行该文件时,我得到了一个
AttributeError

AttributeError:类型对象“scipy.interpolate.interpind.array”没有 属性“\uuuu reduce\u cython\uuuuuu”

使用版本: Python:3.7.3 Scipy:1.2.1 赛顿:0.29.7 cx_冻结:5.1.1

我已经将所有使用过的模块升级到最新版本,并搜索错误。我还尝试卸载并重新安装模块

我使用了以下cx\u Freeze
setup.py

from cx_Freeze import setup, Executable
import os

# Set environment variables
# https://stackoverflow.com/questions/35533803/keyerror-tcl-library-when-i-use-cx-freeze
os.environ['TCL_LIBRARY'] = r'C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\tcl\tk8.6'

includes = ["numpy", "numpy.core._methods", "numpy.lib.format", "sklearn", "ipaddress", "schwifty", "pandas", "multiprocessing.pool", "pkg_resources._vendor", "appdirs", "sklearn.ensemble.forest", "packaging.version", "packaging.specifiers", "packaging.requirements", "xgboost", "email.mime.text", "email.mime.multipart", "idna.idnadata", 'scipy._distributor_init', 'scipy.sparse.csgraph._validation', "cython", "scipy.interpolate.interpnd", "scipy"]

setup(name = "fraudDetection",
      version = "0.1",
      description = "",
      options = {'build_exe': {'includes': includes}},
      executables = [Executable("fraudDetection.py")]
      )
我希望exe文件运行并给出预测(欺诈检测),但我收到了以下错误消息(每次启动exe文件时):

编辑:更新了错误文件

File "C:\Program Files (x86)\Microsoft Visual 
Studio\Shared\Anaconda3_64\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run
    module.run()
  File "C:\Program Files (x86)\Microsoft Visual 
Studio\Shared\Anaconda3_64\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run
    exec(code, m.__dict__)
  File "fraudDetection.py", line 40, in <module>
    from sklearn import preprocessing
  File "C:\Program Files (x86)\Microsoft Visual 
Studio\Shared\Anaconda3_64\lib\site-packages\sklearn\preprocessing\__init__.py", line 6, in <module>
    from ._function_transformer import FunctionTransformer
  File "C:\Program Files (x86)\Microsoft Visual 
Studio\Shared\Anaconda3_64\lib\site-packages\sklearn\preprocessing\_function_transformer.py", line 5, in <module>
    from ..utils.testing import assert_allclose_dense_sparse
  File "C:\Program Files (x86)\Microsoft Visual 
Studio\Shared\Anaconda3_64\lib\site-packages\sklearn\utils\testing.py", line 21, in <module>
    import scipy.io
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\scipy\io\__init__.py", 
line 97, in <module>
    from .matlab import loadmat, savemat, whosmat, byteordercodes
  File "C:\Program Files (x86)\Microsoft Visual 
Studio\Shared\Anaconda3_64\lib\site-packages\scipy\io\matlab\__init__.py", line 13, in <module>
    from .mio import loadmat, savemat, whosmat
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\scipy\io\matlab\mio.py", 
line 10, in <module>
    from .miobase import get_matfile_version, docfiller
  File "C:\Program Files (x86)\Microsoft Visual 
Studio\Shared\Anaconda3_64\lib\site-packages\scipy\io\matlab\miobase.py", line 22, in <module>
    from scipy.misc import doccer
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\scipy\misc\__init__.py", 
line 68, in <module>
    from scipy.interpolate._pade import pade as _pade
  File "C:\Program Files (x86)\Microsoft Visual 
Studio\Shared\Anaconda3_64\lib\site-packages\scipy\interpolate\__init__.py", line 175, in <module>
    from .interpolate import *
  File "C:\Program Files (x86)\Microsoft Visual 
Studio\Shared\Anaconda3_64\lib\site-packages\scipy\interpolate\interpolate.py", line 32, in <module>
    from .interpnd import _ndim_coords_from_arrays
  File "stringsource", line 105, in init scipy.interpolate.interpnd
AttributeError: type object 'scipy.interpolate.interpnd.array' has no attribute '__reduce_cython__'
File“C:\Program Files(x86)\Microsoft Visual
Studio\Shared\Anaconda3\u 64\lib\site packages\cx\u Freeze\initscripts\\uuuuuu startup\uuuuuu.py”,第14行,运行中
module.run()
文件“C:\Program Files(x86)\Microsoft Visual
Studio\Shared\Anaconda3\u 64\lib\site packages\cx\u Freeze\initscripts\Console.py”,第26行,运行中
执行官(代码、指令)
文件“fraudDetection.py”,第40行,在
从sk学习导入预处理
文件“C:\Program Files(x86)\Microsoft Visual
Studio\Shared\Anaconda3\u 64\lib\site packages\sklearn\preprocessing\\uuuuu init\uuuuuuu.py”,第6行,在
from.\u函数\u转换器导入函数转换器
文件“C:\Program Files(x86)\Microsoft Visual
Studio\Shared\Anaconda3\u 64\lib\site packages\sklearn\preprocessing\\u function\u transformer.py”,第5行,在
from..utils.testing导入断言\u allclose\u densite\u sparse
文件“C:\Program Files(x86)\Microsoft Visual
Studio\Shared\Anaconda3\u 64\lib\site packages\sklearn\utils\testing.py”,第21行,在
导入scipy.io
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Anaconda3\u 64\lib\site packages\scipy\io\\uuu init\uuu.py”,
第97行,在
从.matlab导入loadmat、savemat、whosmat、字节顺序码
文件“C:\Program Files(x86)\Microsoft Visual
Studio\Shared\Anaconda3\u 64\lib\site packages\scipy\io\matlab\\uuuuuuu init\uuuuuuuuuu.py”,第13行,在
从.mio导入loadmat、savemat、whosmat
文件“C:\ProgramFiles(x86)\Microsoft Visual Studio\Shared\Anaconda3\u 64\lib\site packages\scipy\io\matlab\mio.py”,
第10行,在
从.miobase导入获取matfile版本,docfiller
文件“C:\Program Files(x86)\Microsoft Visual
Studio\Shared\Anaconda3\u 64\lib\site packages\scipy\io\matlab\miobase.py”,第22行,在
从scipy.misc导入doccer
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Anaconda3\u 64\lib\site packages\scipy\misc\\uuu init\uuuu.py”,
第68行,在
从scipy.interpolate.\u pade导入pade as\u pade
文件“C:\Program Files(x86)\Microsoft Visual
Studio\Shared\Anaconda3\u 64\lib\site packages\scipy\interpolate\\uuuuuu init\uuuuuu.py”,第175行,在
从。插入导入*
文件“C:\Program Files(x86)\Microsoft Visual
Studio\Shared\Anaconda3\u 64\lib\site packages\scipy\interpolate\interpolate.py”,第32行,在
from.interpand从数组导入\u ndim\u coords\u
文件“stringsource”,第105行,在init scipy.interpolate.interpand中
AttributeError:类型对象“scipy.interpolate.interpnd.array”没有属性“\uuuu reduce\u cython\uuuu”
  • 正如@ead和@DavidW所评论的,您发布的错误消息表明,鉴于路径中的
    Python36
    文件夹,Scipy是从python3.6安装中导入的

    File "C:\Users\user.name\AppData\Roaming\Python\Python36\site-packages\scipy\interpolate\interpolate.py"
    
    但也许您只是忘记了编辑错误消息的这一部分

    无论如何,您可以添加以下行

    import sys
    import scipy
    print(sys.version)
    print(scipy.__version__)
    
    setup.py
    文件,查看cx\U Freeze构建可执行文件时实际使用的Python和Scipy版本

  • Cython github存储库中对同一错误消息有相当广泛的讨论,请参阅。你可以在那里找到进一步的建议

    根据这一讨论,错误是由Cython中的一个问题引起的,该问题已在Cython 0.28中解决。您还会发现以下内容非常有用:

    […]如果您安装的某个软件包是使用有bug的较旧Cython版本构建的,那么在您的系统上安装Cython版本x.y是完全不相关的

    我现在就关闭这张票,因为原因是0.28。如果在使用0.28或更高版本构建的软件中发现类似问题,请打开新的记录单

    编辑:要验证Cython实现的包是否使用正确的(ed)Cython版本构建,请解压缩其源发行版(
    *.tar.gz
    ,从PyPI中找到
    .c
    .cpp
    文件,并查看它们的第一行。如果它显示由Cython 0.28*/或更高版本生成的
    /*则包含修复程序。如果版本较旧,则不包括修复程序,在这种情况下,最好向项目请求新版本

    因此,您还需要检查所有使用Cython构建并包含在可执行文件中的包是否都是使用Cython 0.28或更高版本构建的


  • 你说你使用了Python3.7,但在你的回溯中我看到了Python3.6的库——这可能会起到一定的作用。除此之外,你应该提交一份bug报告(因此不是最好的地方)。@ead你是对的,当然,我在更新python和模块之前使用了旧的输出文件。我现在将错误更新为新版本(见上文)。@chris您所做的唯一一件事就是添加“编辑:更新了错误文件”。错误消息是完全相同的,仍然显示了一个路径,其中包含“Python36”…显然您是对的,在编辑时必须多次点击cmd+z。对不起!