a_g*_*est 25 python numpy matplotlib pyinstaller pyqt4
我尝试使用PyInstaller在Windows 7下编译Python项目.该项目工作正常,没有问题,但是当我尝试编译它时,结果不起作用.虽然在编译期间我没有收到任何警告warnmain.txt,但build目录中的文件中有许多警告:warnmain.txt
我真的不明白那些警告,例如"没有名为numpy.pi的模块",因为numpy.pi它不是模块而是数字.我从未尝试过导入numpy.pi.我做进口numpy和matplotlib明确.另外我正在使用PyQt4.我认为错误可能与这些库有关.
但是我能够编译一个成功使用numpy的简单脚本:
import sys
from PyQt4 import QtGui, QtCore
import numpy as np
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.pb = QtGui.QPushButton(str(np.pi), self)
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
这里成功意味着创建的可执行文件实际上显示了所需的输出.但是,还会warnmain.txt创建一个文件,其中包含与之前完全相同的"警告".因此,我认为编译我的实际项目没有取得任何成功的事实不是(或至少不仅仅)与这些警告相关.但那么还有什么可能是错误呢?编译期间唯一的输出是'INFO',并且没有一个是否定的声明.
我没有指定一个额外的钩子目录,但钩子使用默认目录向下,只要我可以从编译输出读取,例如hook-matplotlib执行.我看不到任何钩子,numpy因为我的小例子脚本也没有,但这个有用.我在我的文件中使用了以下导入(不是全部在同一个但在不同的文件中):
import numpy as np
import matplotlib.pyplot as ppl
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
from PyQt4 import QtGui, QtCore
import json
import sys
import numpy # added this one later
import matplotlib # added this one later
Run Code Online (Sandbox Code Playgroud)
由于PyInstaller没有给出任何错误/警告,我无法弄清楚问题是否与库有关或是否还有其他问题需要考虑.
101*_*101 21
如果您遇到ModuleNotFoundError: No module named ...错误并且您:
那么您的可执行文件可能无法找到相对导入。
这可以通过以下方式解决:
从与主脚本相同的目录调用 PyInstaller
或者删除任何__init__.py文件(__init__.pyPython 3.3+ 中不需要空文件)
或者使用 PyInstaller 的paths标志来指定搜索导入的路径。例如,如果您从父文件夹调用 PyInstaller 到主脚本,并且您的脚本位于 中subfolder,则按如下方式调用 PyInstaller:
pyinstaller --paths=subfolder subfolder/script.py。
HHe*_*est 15
有类似的问题no module named FileDialog.发现版本3.2,我可以使用
pyinstaller --hidden-import FileDialog ...
而不是修改我的主脚本.
use*_*007 11
Pyinstaller不会看到二级导入.因此,如果您导入模块A,pyinstaller会看到这一点.但是不会看到在A中导入的任何其他模块.
您无需更改python脚本中的任何内容.您可以直接将缺少的导入添加到spec文件中.只需更改以下行:
hiddenimports=[],
Run Code Online (Sandbox Code Playgroud)
至
hiddenimports=["Tkinter", "FileDialog"],
Run Code Online (Sandbox Code Playgroud)
问题是matplotlib的一些运行时依赖性.所以在运行程序时编译很好,引发了一些错误.因为终端立即关闭了我没有意识到这一点.重定向后stdout,并stderr到一个文件,我可以看到,我错过了图书馆Tkinter和FileDialog.import在主要顶部添加两个s解决了这个问题.
我面临着同样的问题,以下解决方案对我有用:
| 归档时间: |
|
| 查看次数: |
44116 次 |
| 最近记录: |