cx_freeze .exe移动时无法工作



我从一组脚本中制作了一个cx_freexe .exe,这些脚本在原始构建文件夹中正常工作。但是,当我以更多的肌肉将其移至分析计算机时,我会收到以下错误:

C:Program FilesDavidekDavidek beta 1.2.0>Davidek.exe
Traceback (most recent call last):
  File "C:ProgramDataAnaconda3libsite-packagescx_Freezeinitscripts__start
up__.py", line 12, in <module>
  File "C:ProgramDataAnaconda3libsite-packagescx_FreezeinitscriptsConsole
.py", line 24, in <module>
  File "Davidek.py", line 11, in <module>
  File "C:UsersMaxScilifelabProjectsMaster thesisDavidekCodeTICwriter.py
", line 7, in <module>
  File "C:ProgramDataAnaconda3libsite-packagesmatplotlib__init__.py", line
 122, in <module>
  File "C:ProgramDataAnaconda3libsite-packagesmatplotlibcbook.py", line 32
, in <module>
  File "C:ProgramDataAnaconda3libsite-packagesnumpy__init__.py", line 142,
 in <module>
  File "C:ProgramDataAnaconda3libsite-packagesnumpyadd_newdocs.py", line 1
3, in <module>
  File "C:ProgramDataAnaconda3libsite-packagesnumpylib__init__.py", line
8, in <module>
  File "C:ProgramDataAnaconda3libsite-packagesnumpylibtype_check.py", lin
e 11, in <module>
  File "C:ProgramDataAnaconda3libsite-packagesnumpycore__init__.py", line
 14, in <module>
ImportError: DLL load failed: The specified module could not be found.
C:Program FilesDavidekDavidek beta 1.2.0>PAUSE
Press any key to continue . . .

这是似乎引起问题的代码" ticwriter.py":

import matplotlib
#Forces matplotlib to not show plot:
matplotlib.use('Agg')
import matplotlib.pyplot as pl    
import os
def TICwriter(TIC, dataFile, saveDirectory):
    """ Saves a TIC file as a .png in the specified saveDirectory under a 
        output subdirectory.
    """
    #Create savename from data file name:
    savefile =  dataFile.split('/')[-1].split('.')[0] + '_TIC.png'
    #Create ouput directory:
    saveDirectory = os.path.join(saveDirectory, 'output/')
    os.makedirs(os.path.dirname(saveDirectory), exist_ok=True)
    #Plot figure:
    Plot = pl.figure()
    TICplot = Plot.add_subplot(111)
    TICplot.plot([d[0] for d in TIC], [d[1] for d in TIC])
    #Save and close plot:
    pl.savefig(saveDirectory + savefile)
    pl.close(Plot)

在我看来,Matplotlib正在引起问题,因为错误发生在第7行中:

import matplotlib

我的构建脚本看起来像这样:

import sys
from os import environ
from os.path import dirname
from cx_Freeze import setup, Executable
import scipy
scipy_path = dirname(scipy.__file__)

# Set the TCL and TK library explicitly (it seems like the python 3.6 causes
# errors otherwise):
environ['TCL_LIBRARY'] = r'C:ProgramDataAnaconda3tcltcl8.6'
environ['TK_LIBRARY'] = r'C:ProgramDataAnaconda3tcltk8.6'

#Inclusion of dll files to fix tkinter import:
include_files = [r'C:ProgramDataAnaconda3DLLstcl86t.dll', 
                 r'C:ProgramDataAnaconda3DLLstk86t.dll', 
                 scipy_path]
#Inclusion of modules that need to be explicitly imported for some reason:
packages = []#['pyteomics']
#Dependencies that are not implicitly detected:
build_exe_options = {'includes': ['numpy.core._methods', 'numpy.lib.format', 'numpy.matlib'], 
                     'excludes': [],
                     'include_files': include_files, 
                     'packages': packages}
# GUI applications require a different base on Windows (the default is for a
# console application).
base = "Console"
#if sys.platform == 'win32':
#    base = 'Win32GUI'
setup(  name = 'Davidek beta 1.1.1',
        version = '1.1.1',
        options = {'build_exe': build_exe_options},
        executables = [Executable('Davidek.py', base=base)])

在我看来,.EXE试图从计算机中查找原始文件夹中的matplotlib模块,即使在构建文件夹中包含matplotlib,也可以在其中创建可执行文件。每当我从原始计算机运行它,即使我从原始文件夹移动构建,该.EXE也可以正常运行。我在64位Windows 10上使用Python 3.6。对此的任何建议将不胜感激。让我知道是否需要更多信息。

谢谢。

我设法修复了它,因此我们将来要解决这个问题的人:可以通过复制" c: programData anaconda3 library"复制以下文件来解决问题。 bin"(或" ... anaconda3 library bin"(到您的构建文件夹:

  • mkl_core.dll
  • mkl_intel_thread.dll
  • mkl_def.dll
  • libiomp5md.dll

最新更新