我从使用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 specifically或cx-freeze doesn't find all dependencies
我检查了它们,但似乎不适用于我的情况(至少我不知道如何让它与我正在做的事情一起工作,如果你能解释更多谢谢)
这是一个类似的ImportError: No module named 'queue' while running my app freezed with cx_freeze,但解决方案是导入多进程(我也尝试过了,它也不起作用)
我尝试了setup.py的完整选项
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
)我也尝试了更少的选项
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.dll和tk86t.dll。然而,当我尝试运行它时,两个都失败了。带有"less option“的设置给出了以下错误信息
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
base = 'Console'
if sys.platform == 'win32':
base = 'Win32GUI'它仍然不工作(python setup.py build工作,但当我双击.exe文件时程序不运行)。
我的plot2.py代码被简化为创建jpg文件(它是在我刚刚执行python plot2.py时运行的
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给出
Python 3.6.5 :: Anaconda, Inc.结果。conda list显示我的cx-Freeze版本是5.1.1
使用
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程序。也许我包含了应该排除的包/文件。请帮帮忙。谢谢。
发布于 2019-01-15 20:57:20
我遇到了这个问题,我用'cx_freeze‘代替了'pyinstaller’,然后在构建了exe文件之后,我从"c:\Users\envs\environmentname>\Library\plugins\platforms“复制了'platforms‘文件夹到主.exe文件所在的位置。
https://stackoverflow.com/questions/51106867
复制相似问题