Cx_freeze ImportError没有名为scipy的模块

Jon*_*man 7 python scipy cx-freeze

美好的一天,

我在我正在转换为.exe的代码上使用cx_Freeze时遇到问题.

当我运行cx_Freeze时,我得到以下ImportError,没有没有名为scipy的模块

running install
running build
running build_exe
Traceback (most recent call last):
  File "setup.py", line 25, in <module>
    executables = executables
  File "C:\Python34\lib\site-packages\cx_Freeze\dist.py", line 362, in setup
    distutils.core.setup(**attrs)
  File "C:\Python34\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
  File "C:\Python34\lib\distutils\dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "C:\Python34\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Python34\lib\distutils\command\install.py", line 539, in run
    self.run_command('build')
  File "C:\Python34\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "C:\Python34\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Python34\lib\distutils\command\build.py", line 126, in run
    self.run_command(cmd_name)
  File "C:\Python34\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "C:\Python34\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Python34\lib\site-packages\cx_Freeze\dist.py", line 232, in run
    freezer.Freeze()
  File "C:\Python34\lib\site-packages\cx_Freeze\freezer.py", line 619, in Freeze
    self.finder = self._GetModuleFinder()
  File "C:\Python34\lib\site-packages\cx_Freeze\freezer.py", line 378, in _GetModuleFinder
    finder.IncludePackage(name)
  File "C:\Python34\lib\site-packages\cx_Freeze\finder.py", line 686, in IncludePackage
    module = self._ImportModule(name, deferredImports)
  File "C:\Python34\lib\site-packages\cx_Freeze\finder.py", line 386, in _ImportModule
    raise ImportError("No module named %r" % name)
ImportError: No module named 'scipy'
Run Code Online (Sandbox Code Playgroud)

我可以确认我的系统上安装了Scipy 0.16,当我将其导入其他python代码时可以正常工作.我目前在Windows上运行python 3.4.以下是我的cx_Freeze的setup.py文件.

import cx_Freeze
import sys
import matplotlib

base = None

if sys.platform == 'win32':
    base = 'Win32GUI'

executables = [cx_Freeze.Executable('fractureGUI.py', base=base, icon='star_square.ico')]

packages = ['tkinter','matplotlib','scipy']

include_files = ['star_square.ico', 'C:\\Python34\\Lib\\site-packages\\scipy']

cx_Freeze.setup(
    name = 'FracturePositionMonteCarlo',
    options = {'build_exe': {'packages':packages,
        'include_files':include_files}},
    version = '0.01',
    description = 'Fracture Depth Monte Carlo',
    executables = executables
    )
Run Code Online (Sandbox Code Playgroud)

以下是我的主脚本fractureGUI.py的导入部分.

import scipy
from random import random

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib import style
style.use('ggplot')

import tkinter as tk
from tkinter import ttk, filedialog

import sys
import json
Run Code Online (Sandbox Code Playgroud)

如果有人有任何想法为什么cx_Freeze无法找到scipy请告诉我.我试图将文件路径添加到include_files下的scipy,但它没有任何区别.

亲切的问候,

Jonnyishman

小智 17

我有完全相同的问题.在这里找到解决方案:https: //bitbucket.org/anthony_tuininga/cx_freeze/issues/43/import-errors-when-using-cx_freeze-with

在cx_freeze文件夹中找到hooks.py文件.将finder.IncludePackage("scipy.lib")中的第548行更改为finder.IncludePackage("scipy._lib").

将"scipy"条目保留在包中,并删除include_files中的"C:\ Python34\Lib\site-packages\scipy".

  • 如此处所建议的更改`hooks.py`解决了这个问题,但我不明白怎么做.为什么这个解决方案有效? (5认同)