首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用matplotlib时,运行时来自cx-freeze的错误

使用matplotlib时,运行时来自cx-freeze的错误
EN

Stack Overflow用户
提问于 2018-06-30 01:34:52
回答 1查看 295关注 0票数 1

我从使用cx-freeze开始,源文件只包含print("hello from cx-freeze")。它工作得很好。

然后,我尝试了https://gist.github.com/joferkington/9214844,我得到了错误信息。我将我的源文件改得非常简单。我仍然得到TCL_LIBRARY错误。我听从了KeyError: 'TCL_Library' when I use cx_Freeze的建议(Martin Tournoij)

错误消失了。创建exe文件(如500+ mb)。当我运行该文件时,我得到了错误消息。

我检查其他人的问题Creating exe file with cx_Freeze, PyQt4, matplotlib and multiple .py files does not work (没有提供答案)

cx_Freeze help. ImportError这样的其他问题

cx-freeze fails to include modules even when included specificallycx-freeze doesn't find all dependencies

我检查了它们,但似乎不适用于我的情况(至少我不知道如何让它与我正在做的事情一起工作,如果你能解释更多谢谢)

这是一个类似的ImportError: No module named 'queue' while running my app freezed with cx_freeze,但解决方案是导入多进程(我也尝试过了,它也不起作用)

我尝试了setup.py的完整选项

代码语言:javascript
复制
from cx_Freeze import setup, Executable
import sys
import os.path
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')

base = 'Console'

options = {
    'build_exe': {'packages': ["pandas","numpy","scipy","matplotlib"],
        'include_files':[
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
            os.path.join(PYTHON_INSTALL_DIR, 'Library', 'plugins', 'platforms')
         ],
    },
}

executables = [
    Executable('plot2.py', base = base)
]

setup(name = "plot2" ,
      version = "0.1" ,
      description = "" ,
      executables = executables,
      options = options
      )

我也尝试了更少的选项

代码语言:javascript
复制
from cx_Freeze import setup, Executable
import sys
import os.path
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')

base = 'Console'

options = {
    'build_exe': {'packages': ["matplotlib"],
        'include_files':[
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll')]
    }
}

executables = [
    Executable('plot2.py', base = base)
]

setup(name = "plot2" ,
      version = "0.1" ,
      description = "" ,
      executables = executables,
      options = options
      )

两个都很好。我甚至在我的目标文件夹中有tcl86t.dlltk86t.dll。然而,当我尝试运行它时,两个都失败了。带有"less option“的设置给出了以下错误信息

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\initscripts\__start
up__.py", line 14, in run
    module.run()
  File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\initscripts\Console
.py", line 26, in run
    exec(code, m.__dict__)
  File "plot2.py", line 1, in <module>
  File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\__init__.py", line
 127, in <module>
    from . import cbook
  File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\cbook\__init__.py"
, line 35, in <module>
    import numpy as np
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\__init__.py", line 158,
 in <module>
    from . import add_newdocs
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\add_newdocs.py", line 1
3, in <module>
    from numpy.lib import add_newdoc
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\lib\__init__.py", line
8, in <module>
    from .type_check import *
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\lib\type_check.py", lin
e 11, in <module>
    import numpy.core.numeric as _nx
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\__init__.py", line
 38, in <module>
    from . import numeric
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\numeric.py", line
2896, in <module>
    from . import fromnumeric
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\fromnumeric.py", l
ine 15, in <module>
    from . import _methods
ImportError: cannot import name '_methods'

即使使用https://github.com/anthony-tuininga/cx_Freeze/blob/master/cx_Freeze/samples/matplotlib/setup.py

代码语言:javascript
复制
base = 'Console'
if sys.platform == 'win32':
    base = 'Win32GUI'

它仍然不工作(python setup.py build工作,但当我双击.exe文件时程序不运行)。

我的plot2.py代码被简化为创建jpg文件(它是在我刚刚执行python plot2.py时运行的

代码语言:javascript
复制
import matplotlib.pyplot as plt
x = [1,2,3,4,5.5]
y = [3,4,5,6,7.7]
plt.figure()
plt.plot(x,y,'o')
plt.savefig("test.jpg",dpi = 200)

我通过anaconda安装python。python --version给出

代码语言:javascript
复制
Python 3.6.5 :: Anaconda, Inc.

结果。conda list显示我的cx-Freeze版本是5.1.1

使用

代码语言:javascript
复制
if sys.platform == 'win32':
    base = 'Win32GUI'

并在包列表中添加多处理器,它不工作(我认为这不相关,但看到其他人(在其他应用程序上)做了,它工作,所以我尝试,可能是错误的)。我能做的最多的就是在运行时得到这个错误(如下图所示)。

error report when click on the exe file

有没有办法解决这个问题?我在ubuntu系统上也有python,但还没有试过。如果有帮助,我可以卸载python或使用其他版本的python/cx-Freeze。如果我需要安装其他版本的python/cx-Freeze,请告诉我怎么做。

这里的另一个问题是,有没有办法使exe文件更小。刚创建的图形不应该是500+ mb程序。也许我包含了应该排除的包/文件。请帮帮忙。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-01-15 20:57:20

我遇到了这个问题,我用'cx_freeze‘代替了'pyinstaller’,然后在构建了exe文件之后,我从"c:\Users\envs\environmentname>\Library\plugins\platforms“复制了'platforms‘文件夹到主.exe文件所在的位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51106867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档