cx_Freeze没有找到一些TensorFlow导入(cx_Freeze not finding some TensorFlow imports)
我最近写了一个库(在Python 3.6中),并在Windows 10上使用tkinter为它构建了一个GUI.GUI现在已经完成,我正在尝试使用cx_Freeze来冻结它。
安装脚本运行完全正常(或者至少我无法发现任何错误消息或警告),我可以从中获取可执行文件。 问题是,当我运行它时,我收到以下错误消息:
File "C:\Program Files\Python36\lib\site-packages\tensorflow\python\profiler\profiler.py", line 22 in <module> from tensorflow.core.profiler.tfprof_log_pb2 import OpLogProto ModuleNotFoundError: No module named 'tensorflow.core.profiler.tfprof_log_pb2'
这里提到TensorFlow的原因是我的库使用TensorFlow,当然,我的GUI也是如此。 整个错误消息说的是当我导入tensorflow(
import tensorflow as tf
)时,程序尝试from tensorflow.python import *
和tensorflow.python.profiler
的profiler.py
尝试执行导入导致错误。我找到了导致错误的文件,当我
from tensorflow.core.profiler.tfprof_log_pb2 import OpLogProto
进行IDLE时,它工作得很好。在达到这一点之前,我遇到了几个类似的问题(cx_Freeze构建没有显示任何警告或错误,但.exe有一些
import
错误),但我到目前为止可以自己修复它们,主要是通过将它们添加到列表中在安装脚本中包含include_files
。 我尝试对此TensorFlow文件执行相同操作,但它不起作用。 我还尝试在设置脚本中包含TensorFlow作为包,或者直接在main.py
导入它,但没有成功。我的
setup.py
如下(可能有一些不必要的包括它,因为我尝试了很多东西):from cx_Freeze import setup, Executable import os import sys os.environ['TCL_LIBRARY'] = "C:\\Program Files\\Python36\\tcl\\tcl8.6" os.environ['TK_LIBRARY'] = "C:\\Program Files\\Python36\\tcl\\tk8.6" base = None if sys.platform == "win32": base = "Win32GUI" includes = ["tkinter", "_tkinter", "numpy.core._methods", "numpy.lib.format", "tensorflow"] include_files = ["C:\\Program Files\\Python36\\DLLs\\tcl86t.dll", "C:\\Program Files\\Python36\\DLLs\\tk86t.dll", "C:\\Program Files\\Python36\\DLLs\\_tkinter.pyd", "C:\\Program Files\\Python36\\Lib\\site-packages\\tensorflow\\core\\profiler\\tfprof_log_pb2.py", "C:\\Program Files\\Python36\\Lib\\site-packages\\tensorflow\\python\\profiler\\profiler.py", "C:\\Program Files\\Python36\\Lib\\site-packages\\tensorflow\\include\\tensorflow\\core\\profiler\\tfprof_log.pb.h"] packages = [] setup(name = "Ap'Pear", version = "0.1", description = "Test executable", options = {"build_exe": { "includes": includes, "include_files": include_files, "packages": packages}}, executables = [Executable(script = "main.py", targetName = "Ap'Pear.exe", base = base, icon = "images/icon.ico")], )
我尝试从头开始重建TensorFlow及其依赖项,但它也没有解决任何问题。
提前致谢!
I recently wrote a library (in Python 3.6) and built a GUI for it using tkinter on Windows 10. The GUI is now finished, and I'm trying to freeze it using cx_Freeze.
The setup script runs perfectly fine (or at least I couldn't spot any error message or warning) and I can get my executable out of it. The problem is, when I run it, I get the following error message:
File "C:\Program Files\Python36\lib\site-packages\tensorflow\python\profiler\profiler.py", line 22 in <module> from tensorflow.core.profiler.tfprof_log_pb2 import OpLogProto ModuleNotFoundError: No module named 'tensorflow.core.profiler.tfprof_log_pb2'
The reason why TensorFlow is mentioned here is that my library uses TensorFlow, and of course, so does my GUI. What the entire error message says is that when I'm importing tensorflow (
import tensorflow as tf
), the program tries to dofrom tensorflow.python import *
and theprofiler.py
intensorflow.python.profiler
then tried to do the import that causes the error.I found the file that causes the error, and when I do on IDLE
from tensorflow.core.profiler.tfprof_log_pb2 import OpLogProto
, it works perfectly fine.Before reaching to that point, I encountered several similar problems (the cx_Freeze building without displaying any warning or error, but the .exe having some
import
errors), but I could so far fix them all by myself, mostly by adding them to the list ofinclude_files
in the setup script. I tried to do the same for this TensorFlow file, but it didn't work. I also tried including TensorFlow as a package in the setup script, or directly importing it all in mymain.py
, without success.My
setup.py
is the following (there might be some unnecessary includes with it, since I tried lots of things):from cx_Freeze import setup, Executable import os import sys os.environ['TCL_LIBRARY'] = "C:\\Program Files\\Python36\\tcl\\tcl8.6" os.environ['TK_LIBRARY'] = "C:\\Program Files\\Python36\\tcl\\tk8.6" base = None if sys.platform == "win32": base = "Win32GUI" includes = ["tkinter", "_tkinter", "numpy.core._methods", "numpy.lib.format", "tensorflow"] include_files = ["C:\\Program Files\\Python36\\DLLs\\tcl86t.dll", "C:\\Program Files\\Python36\\DLLs\\tk86t.dll", "C:\\Program Files\\Python36\\DLLs\\_tkinter.pyd", "C:\\Program Files\\Python36\\Lib\\site-packages\\tensorflow\\core\\profiler\\tfprof_log_pb2.py", "C:\\Program Files\\Python36\\Lib\\site-packages\\tensorflow\\python\\profiler\\profiler.py", "C:\\Program Files\\Python36\\Lib\\site-packages\\tensorflow\\include\\tensorflow\\core\\profiler\\tfprof_log.pb.h"] packages = [] setup(name = "Ap'Pear", version = "0.1", description = "Test executable", options = {"build_exe": { "includes": includes, "include_files": include_files, "packages": packages}}, executables = [Executable(script = "main.py", targetName = "Ap'Pear.exe", base = base, icon = "images/icon.ico")], )
I tried rebuilding TensorFlow and its dependencies from scratch, but it didn't solve anything either.
Thanks in advance!
原文:https://stackoverflow.com/questions/48123840
最满意答案
因为它不是对象文字,所以它是一个代码块。 括号内的内容未被解析为键值对,它被解析为代码。
foo: 'bar'
可以作为代码,因为foo:
是一个标签,'bar'
是一个表达式。
'foo':
不行,因为代码作为标签不能是字符串,它必须是一个标识符。要使它成为一个对象文字,你必须使它成为一个表达式,如:
<script> var x = {'foo':'bar'}</script>
要么:
<script> ({'foo':'bar'})</script>
Because it's not an object literal, it's a code block. What's inside the brackets is not parsed as key-value pairs, it's parsed as code.
foo: 'bar'
is fine as code, asfoo:
is a label and'bar'
is an expression.
'foo':
is not ok as code as a label can't be a string, it has to be an identifier.To make it an object literal, you have to make it an expression, like:
<script> var x = {'foo':'bar'}</script>
or:
<script> ({'foo':'bar'})</script>
相关问答
更多-
http://jsbin.com/yegeyotuyi/edit?html,js,console 固定间距和缩进时错误消失。 原来,只要你输入一个软返回(shift-enter),它就会抛出异常 http://jsbin.com/yegeyotuyi/edit?html,js,console The error went away while fixing spacing and indentation. Turns out it throws an exception as soon as you ent ...
-
该错误消息表示JavaScript语法错误。 您引用的代码是XHTML,它不是JavaScript。 试图将其视为JavaScript(正如您所做)注定要失败。 这可能是由于在src属性中输入了错误的URL。 The error message indicates a JavaScript syntax error. The code you quoted is XHTML, which is not JavaScript. Trying to treat it as JavaScript (as you ...
-
因为它不是对象文字,所以它是一个代码块。 括号内的内容未被解析为键值对,它被解析为代码。 foo: 'bar'可以作为代码,因为foo:是一个标签, 'bar'是一个表达式。 'foo':不行,因为代码作为标签不能是字符串,它必须是一个标识符。 要使它成为一个对象文字,你必须使它成为一个表达式,如: 要么: Because it's not an objec ...
-
JavaScript使用else if not elseif 。 JavaScript uses else if , not elseif.
-
浏览器在请求a.config.js时看到了什么? 也许有一些URL重写涉及。 What does the browser see when it requests a.config.js? Maybe there is some URL rewriting involved.
-
未捕获的syntaxerror意外令牌非法android webview(uncaught syntaxerror unexpected token illegal android webview)[2023-09-16]
您的JavaScript中可能存在语法错误,例如缺少分号。 在PC浏览器中打开此网页并检查控制台是否有错误,或使用JavaScript的在线验证工具( http://www.javascriptlint.com/online_lint.php )。 祝你好运。 You probably have an syntax error in your JavaScript, missing semicolon for example. Open this web page in your PC browser an ... -
(未捕获的SyntaxError:意外的令牌:) - 怎么办?(( Uncaught SyntaxError: Unexpected token : ) - What to do?)[2024-05-03]
JSON和JSONP之间差异的简短说明 JSON是一种字符串格式,表示Javascript表示法中的对象文字。 例: '{"number":36, "sqrt": 6}' JSONP是一种字符串格式,表示理想情况下包含JSON作为此方法调用的参数的Javascript方法调用 例: mycallback('{"number":36, "sqrt": 6}'); 如果服务提供JSON响应,则它不会自动提供JSONP响应。 必须显式配置服务器脚本才能执行此操作。 您不能假设您的服务器脚本为您提供了JSONP ... -
Jquery Ajax - 未捕获的SyntaxError - 意外的令牌(Jquery Ajax - Uncaught SyntaxError - Unexpected token)[2022-06-14]
您正在使用的URL似乎不是JSONP服务。 它返回一个普通的JSON结构,这对JSONP不起作用。 您需要为该服务找出替代API,即JSONP,或者从服务器查询它。 That URL that you're using does not appear to be a JSONP service. It's returning a plain JSON structure, and that won't work for JSONP. You'll either need to figure out an a ... -
尝试从head标签中删除runat="server"
Merchants TotalView Try removing the runat="server" from the head tagMerchants TotalView ... -