visual studio not available python numpy matplotlib pyqt4 pyinstaller

python - studio - Ningún módulo nombrado al usar PyInstaller



pyinstaller visual studio (5)

Intento compilar un proyecto de Python en Windows 7 usando PyInstaller. El proyecto funciona bien, no hay problemas, sin embargo, cuando intento compilarlo, el resultado no funciona. Aunque no recibo advertencias durante la compilación, hay muchas en el archivo warnmain.txt en el directorio de build : warnmain.txt

Realmente no entiendo esas advertencias, por ejemplo "ningún módulo llamado numpy.pi" ya que numpy.pi no es un módulo sino un número. Nunca intenté importar numpy.pi . numpy y matplotlib explícitamente. Además estoy usando PyQt4. Pensé que el error podría estar relacionado con esas bibliotecas.

Sin embargo, pude compilar un script simple que usa numpy con éxito:

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_())

Con éxito aquí significa que el archivo ejecutable creado realmente mostró el resultado deseado. Sin embargo, también hay un archivo warnmain.txt creado que contiene exactamente las mismas ''advertencias'' que el anterior. Así que supongo que el hecho de que compilar mi proyecto real no da ningún éxito no está (o al menos no solo) relacionado con esas advertencias. ¿Pero qué más podría ser el error entonces? El único resultado durante la compilación son ''INFO'' y ninguno de ellos es una declaración negativa.

No especifiqué un directorio de gancho adicional, pero los ganchos estaban abajo usando el directorio predeterminado hasta donde pude leer de la salida de compilación, por ejemplo, se ejecutó hook-matplotlib . No pude ver ningún gancho para numpy ni pude ver mi pequeño script de ejemplo, pero este funcionó. Utilicé las siguientes importaciones en mis archivos (no todos en el mismo pero en diferentes):

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

Dado que PyInstaller no da ningún error / advertencia, no pude averiguar si el problema está relacionado con las bibliotecas o si hay algo más que considerar.


El problema eran algunas dependencias de tiempo de ejecución de matplotlib. Así que la compilación estuvo bien mientras se ejecutaba el programa arrojó algunos errores. Como la terminal se cerró de inmediato, no me di cuenta de eso. Después de redirigir stdout y stderr a un archivo, pude ver que echaba de menos las bibliotecas Tkinter y FileDialog . Agregar dos import en la parte superior de la página principal resolvió este problema.


Pyinstaller no verá importaciones de segundo nivel . Entonces, si importa el módulo A , pyinstaller ve esto. Pero no se verá ningún módulo adicional que se importe en A.

No hay necesidad de cambiar nada en sus scripts de Python. Puede agregar directamente las importaciones que faltan al archivo de especificaciones . Simplemente cambie la siguiente línea:

hiddenimports=[],

a

hiddenimports=["Tkinter", "FileDialog"],


Si el problema es que no necesita Tkinter y amigos porque está usando PyQt4, entonces sería mejor evitar cargar Tkinter, etc. Mire en / etc / matplotlibrc y cambie los valores predeterminados a PyQt4, vea las líneas ''modificadas'' a continuación:

#### CONFIGURATION BEGINS HERE # The default backend; one of GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo # CocoaAgg MacOSX Qt4Agg Qt5Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG # Template. # You can also deploy your own backend outside of matplotlib by # referring to the module name (which must be in the PYTHONPATH) as # ''module://my_backend''. #modified #backend : TkAgg backend : Qt4Agg # If you are using the Qt4Agg backend, you can choose here # to use the PyQt4 bindings or the newer PySide bindings to # the underlying Qt4 toolkit. #modified #backend.qt4 : PyQt4 # PyQt4 | PySide backend.qt4 : PyQt4 # PyQt4 | PySide


Tuve el mismo problema con pyinstaller 3.0 y weblib . Importarlo en general no ayudó.

La actualización a 3.1 y la eliminación de todos los archivos de compilación ayudaron.

pip install --upgrade pyinstaller


Tuve un problema similar con no module named FileDialog . Descubrí que con la versión 3.2, podría usar

pyinstaller --hidden-import FileDialog ...

en lugar de modificar mi script principal.