- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个程序,可以通过绘制表面和点云来查看它们与表面的关系,从而帮助以 3D 形式可视化一些数据。对于可视化,我使用 mayavi,因为它很容易设置,并且在 3D 方面比 matplotlib 做得更好。当我在 python 环境中运行该程序时,它运行得非常好,并且可以生成漂亮的可视化效果。但是,我需要将其分发给一些没有 Python 并且不想在每台计算机上安装 python 和所有加载项的人,因此我一直在使用 pyinstaller 创建独立的 .exe 文件,以便他们使用开发完程序后就可以运行了。
仅供引用,这一切都是在 Windows 10、Python 3.6、pyqt 4.11.4、pyface 6.0.0、traits 4.6.0、pyinstaller 3.3.1、mayavi 4.5.0+vtk81 上完成的。我使用的几乎每个模块都是使用 pip 安装的。
问题是,如果我使用/导入 mayavi 模块,我似乎无法获得工作的 exe。我已经阅读了很多关于不同钩子(Hook)文件和隐藏导入的 github 文档,每次我修复一个错误时都会弹出另一个错误。这一切都是从 scipy 开始的,但我相信我已经解决了这些问题。所以我有几个问题可以帮助我解决问题:
1)是否有人使用 pyinstaller 和 Mayavi 导入(特别是 from mayavi import mlab
)成功创建了独立的 exe?你的 secret 是什么?!?
这看起来很相似,但我还没能弄清楚... SO_link
我已使用以下链接( scipy 、 h5py 、 pandas 、 traits/qt4 、 ETS_TOOLKIT )来添加隐藏导入或修复其他问题,但在设置 ETS_TOOLKIT=qt4 后我现在陷入困境。在设置它之前,我会收到 pyface/traits 错误 RuntimeError: No Traitsui.toolkits plugin found for toolkit null
,但现在它对 qt4 说同样的事情,而不是 null。我安装了 qt4,所以我不明白...它位于 pyface/base_toolkit.py 中的 import_toolkit 函数中。
2) 在 3D 可视化/exe 创建方面有更好的途径吗?我需要一个 3D 程序,它可以准确地渲染点位于表面的前面或后面,并且能够交互式地旋转/缩放/平移,而且它需要直观。 Mayavi 具有与 matplotlib 类似的非常简单的命令,但其他命令似乎非常复杂,围绕 UI 如何与所有内容交互。
3) 如何解释我收到的所有这些错误代码?他们通常非常含糊地说,某一行引发了嵌套在其他 10 个函数调用中的异常,而且似乎很难找出到底哪里出了问题,特别是当 Google 上没有弹出任何似乎相关的内容时。
编辑
虽然我仍然很困惑,但我已经能够更改错误发生的位置。在回溯之后,我在traitsui/editors/code_editor.py(第49行)中注释掉了设置标记颜色的行,此时异常在下次调用 Color 方法时开始......但我仍然得到相同的结果运行时错误。因此,除了我仍在寻找需要包含哪些隐藏导入才能使此功能正常工作之外,这并没有告诉我太多信息。
另请注意,我在 PyInstaller 和 cx_Freeze 中都遇到了完全相同的错误,以防有帮助...
编辑2
我现在已经尝试使用 anaconda for python 2.7,同样的问题......我开始相信宇宙不希望这种情况发生。我应该在其他地方提出这个问题吗?我已经在 Traitsui GitHub 上发布了,但这并没有多大帮助。这似乎比 pyinstaller/cx_freeze 更大,因为它发生在两者中......
最佳答案
我处理了同样的问题,最后切换到 cx_freeze,它现在在 Linux 和 Windows 上运行良好。您正在处理的问题是由类似 SE answer 中的语句引起的。 ,您发现,即动态导入语句,其中导入的内容仅在运行时确定:
be = 'pyface.ui.%s.' % tk
__import__(be + 'init')
我无法在 pyinstaller 中修复这个问题,而在 cx_freeze 中,当您在构建文件中明确添加所需的包时,它可以工作。这是我使用的包列表:
"packages": ["pyface.ui.qt4", "tvtk.vtk_module", "tvtk.pyface.ui.wx", "matplotlib.backends.backend_qt4",'pkg_resources._vendor','pkg_resources.extern','pygments.lexers',
'tvtk.pyface.ui.qt4','pyface.qt','pyface.qt.QtGui','pyface.qt.QtCore','numpy','matplotlib','mayavi']
这是一个完整的构建脚本,适用于 python3.6、cx_freeze 5.0.2、mayavi 4.5.0+vtk71、traits 4.6.0、pyface 5.1.0 和 Traitsui 5.1.0。
import os
from cx_Freeze import setup, Executable
import cx_Freeze.hooks
def hack(finder, module):
return
cx_Freeze.hooks.load_matplotlib = hack
import scipy
import matplotlib
scipy_path = os.path.dirname(scipy.__file__) #use this if you are also using scipy in your application
build_exe_options = {"packages": ["pyface.ui.qt4", "tvtk.vtk_module", "tvtk.pyface.ui.wx", "matplotlib.backends.backend_qt4",'pygments.lexers',
'tvtk.pyface.ui.qt4','pyface.qt','pyface.qt.QtGui','pyface.qt.QtCore','numpy','matplotlib','mayavi'],
"include_files": [(str(scipy_path), "scipy"), #for scipy
(matplotlib.get_data_path(), "mpl-data"),],
"includes":['PyQt4.QtCore','PyQt4.QtGui','mayavi','PyQt4'],
'excludes':'Tkinter',
"namespace_packages": ['mayavi']
}
executables = [
Executable('main.py', targetName="main.exe",base = 'Win32GUI',)
]
setup(name='main',
version='1.0',
description='',
options = {"build_exe": build_exe_options},
executables=executables,
)
我通过以下方式导入 pyface:
os.environ['ETS_TOOLKIT'] = 'qt4'
import imp
try:
imp.find_module('PySide') # test if PySide if available
except ImportError:
os.environ['QT_API'] = 'pyqt' # signal to pyface that PyQt4 should be used
from pyface.qt import QtGui, QtCore
导入 Mayavi 之前
关于python - 使用 pyinstaller 和 mayavi 导入创建独立的 exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50337382/
我需要在 pyinstaller“onefile”可执行文件中包含一个 DLL 和一个文本文件。我可以只添加 DLL,但如果我尝试指定这两个文件,pyinstaller 会提示。我宁愿使用命令行选项(
我编写了一个 python 应用程序,它使用 pdfkit 包来打印 PDF。我正在使用 pyinstaller 在 Ubuntu 上构建此应用程序的可执行文件。 pdfkit 依赖于使用 sudo
我想弄清楚为什么 PyInstaller 一直包含 PyQt 的 Windows dll 文件,即使我的应用程序不使用 PyQt。所以,我想知道如何确定 为什么 PyInstaller 认为 PyQt
我在我的 mac osx sierra 下安装了 2 个 python 版本: python 3.5 python 2.7 我用这个命令在python3.5下安装了pyinstaller: pytho
所以,标题基本上涵盖了我的问题。我已经使用 virtualenv 创建了一个项目,例如我必须 source ./env/bin/activate 运行我的脚本。 当我尝试使用以下命令创建可执行文件时:
大约一个月前,我使用 PyInstaller 和 Inno Setup 为我的 Python 3 脚本生成了一个安装程序。我的 AVG Business Edition AntiVirus 刚刚开始提
我正在尝试使用 pyinstaller 制作可执行文件,方法如下: pyinstaller -F --add-binary="sometool.exe:."myapp.py 构建工作正常。但是,如果我
我想要卡住一个 Python 应用程序,作为其功能之一,它能够使用 PyInstaller 生成卡住的 Python 应用程序。这是一个最小的应用程序,显示了我想要实现的目标: import PyIn
运行 pyinstaller myfile.spec 下面的回溯 Traceback (most recent call last): File "/usr/local/bin/pyinstall
首先, native 运行 Fedora 13,PyInstaller 版本为 1.5.1 我在生成规范时确实使用了 --onefile 。 从 Python 解释器中运行“import atexit
我想使用以下命令安装 pyinstaller 模块: pip install pyinstaller 但我总是得到以下错误: 最佳答案 我尝试了一切,但最终我找到了解决方案。 您只需将 pip 从 1
我在 Windows 上运行 Python 3.5.3,并尝试使用 pip 安装 Pyinstaller。它似乎工作 - 没有错误或任何东西,就像 pip 一样非常简单。 我试过 import -m
我已经使用 pyinstaller 在 Windows 10 64 位上从 python 脚本创建了一个 exe。我如何设置 exe 以便它在我的另一台装有 Windows 8 32 位的机器上运行。
我使用以下命令安装了最新版本的 PyInstaller:pip install https://github.com/pyinstaller/pyinstaller/archive/develop.z
我用 python 编写程序来打开路径给出的一些可执行文件。我使用: os.startfile(路径) 启动程序。当我在 IDLE 中运行 script.py 时,它工作正常,但是当我使用 pyins
我在 Python 中构建了一个关键字搜索工具,然后使用 Pyinstaller 将其转换为 .exe 格式,因此我工作场所的人无需安装 Python 即可使用它。 我已通过电子邮件将其以 RAR 文
我遇到了一个问题。我正在使用 pyinstaller 将代码导出到 .exe。代码包括 tkinter、PIL 和 keyboard 模块。软件在我使用 Python 的 PC 上运行完美,而在没有
我正在尝试从我的 python 项目中创建一个可执行文件。我正在使用函数“make_executable”构建可执行文件。 运行添加数据的命令会引发如下错误:pyinstaller: 错误: 无法识别
我想从 .py 创建 .exe 文件。如果我运行 .py 文件,它运行良好,我没有问题。但是当我运行 pyinstaller 创建的 .exe 文件时,我无法在命令行中输入(键入)任何内容。 我已经尝
我有一个小应用程序,我正在尝试针对 Windows 机器构建它。该程序创建一个 OpenVPN 连接。如果我构建程序并运行它,它首先会打开一个控制台作为程序输出。如果我通过 -w pyinstalle
我是一名优秀的程序员,十分优秀!