Scipy和CX_freeze - 导入scipy时出错:在scipy源目录

时间:2015-09-21 11:27:34

标签: scipy cx-freeze

在使用cx_freeze和scipy时编译exe时遇到问题。特别是,我的脚本使用

from scipy.interpolate import griddata

构建过程似乎成功完成,但是当我尝试运行已编译的exe时,我收到以下消息。

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
    exec(code, m.__dict__)
  File "gis_helper.py", line 13, in <module>
  File "C:\Python27\lib\site-packages\scipy\__init__.py", line 103, in <module>
    raise ImportError(msg)
ImportError: Error importing scipy: you cannot import scipy while
        being in scipy source directory; please exit the scipy source
        tree first, and relaunch your python intepreter.

查看scipy \ _init__.py文件后,有以下内容:

if __SCIPY_SETUP__:
    import sys as _sys
    _sys.stderr.write('Running from scipy source directory.\n')
    del _sys
else:
    try:
        from scipy.__config__ import show as show_config
    except ImportError:
        msg = """Error importing scipy: you cannot import scipy while
        being in scipy source directory; please exit the scipy source
        tree first, and relaunch your python intepreter."""
        raise ImportError(msg)

我不完全确定这里的问题是什么,但是因为scipy配置文件存在问题,所以似乎抛出了错误。可能没有包含在构建过​​程中。我是一个新手,并希望有更多经验丰富的使用cxfreeze生成构建可以为此提供一些启示。

顺便提一下,使用的scipy是从二进制文件here安装的。

2 个答案:

答案 0 :(得分:12)

我遇到了同样的问题。我将此代码添加到cx_freeze生成的setup.py

import scipy
includefiles_list=[]
scipy_path = dirname(scipy.__file__)
includefiles_list.append(scipy_path)

然后,使用includefiles_list作为build_exe参数的一部分:

build_options = dict(packages=[], include_files=includefiles_list)

setup(name="foo", options=dict(build_exe=build_options))

答案 1 :(得分:0)

我添加了同样的问题并使用fepzzz方法解决了它并包含了一些缺失的包:

additional_mods = ['numpy.matlib', 'multiprocessing.process']
includefiles = [(r'C:\Anaconda3\Lib\site-packages\scipy')]

setup(xxx, options={'build_exe': {'includes': additional_mods, 'include_files': includefiles}})

使用cx-Freeze软件包的5.0.2版,解决了导入multiprocessing.process时的错误。