복붙노트

[PYTHON] PyInstaller를 사용할 때 명명 된 모듈이 없습니다.

PYTHON

PyInstaller를 사용할 때 명명 된 모듈이 없습니다.

PyInstaller를 사용하여 Windows 7에서 Python 프로젝트를 컴파일하려고합니다. 프로젝트는 제대로 작동하지만 아무런 문제가 없습니다. 그러나 컴파일하려고하면 결과가 작동하지 않습니다. 컴파일하는 동안 경고 메시지가 나타나지 않지만 빌드 디렉토리의 warnmain.txt 파일에 많은 경고가 있습니다. warnmain.txt

numpy.pi는 모듈이 아니라 숫자이므로 "nopy라는 모듈이 없습니다."와 같은 경고는 실제로 이해할 수 없습니다. 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_())

여기서 생성 된 실행 파일이 실제로 원하는 출력을 보여준 것을 의미합니다. 그러나 앞에서와 정확히 같은 '경고'를 포함하는 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

PyInstaller는 어떤 오류 / 경고도주지 않기 때문에 문제가 라이브러리와 관련이 있는지 또는 고려해야 할 다른 것이 있는지 파악할 수 없습니다.

해결법

  1. ==============================

    1.Pyinstaller는 두 번째 수준의 가져 오기를 볼 수 없습니다. 따라서 모듈 A를 가져 오면 pyinstaller는이를 보게됩니다. 그러나 A에 가져온 추가 모듈은 표시되지 않습니다.

    Pyinstaller는 두 번째 수준의 가져 오기를 볼 수 없습니다. 따라서 모듈 A를 가져 오면 pyinstaller는이를 보게됩니다. 그러나 A에 가져온 추가 모듈은 표시되지 않습니다.

    파이썬 스크립트에서 아무 것도 변경할 필요가 없습니다. 누락 된 가져 오기를 spec 파일에 직접 추가 할 수 있습니다. 다음 행을 변경하십시오.

    hiddenimports=[],
    

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

    2.문제는 matplotlib의 런타임 종속성입니다. 그래서 프로그램을 실행하는 동안 몇 가지 오류가 던져 컴파일하는 동안 괜찮 았어. 터미널 자체가 즉시 닫히기 때문에 나는 그것을 깨닫지 못했다. stdout과 stderr을 파일로 리다이렉션 한 후에 라이브러리 Tkinter와 FileDialog를 놓쳤다는 것을 알 수 있었다. 메인 위쪽에 두 개의 가져 오기를 추가하면이 문제가 해결됩니다.

    문제는 matplotlib의 런타임 종속성입니다. 그래서 프로그램을 실행하는 동안 몇 가지 오류가 던져 컴파일하는 동안 괜찮 았어. 터미널 자체가 즉시 닫히기 때문에 나는 그것을 깨닫지 못했다. stdout과 stderr을 파일로 리다이렉션 한 후에 라이브러리 Tkinter와 FileDialog를 놓쳤다는 것을 알 수 있었다. 메인 위쪽에 두 개의 가져 오기를 추가하면이 문제가 해결됩니다.

  3. ==============================

    3.FileDialog라는 모듈이없는 비슷한 문제가있었습니다. 버전 3.2에서 발견 된 것은

    FileDialog라는 모듈이없는 비슷한 문제가있었습니다. 버전 3.2에서 발견 된 것은

    pyinstaller - 숨김 가져 오기 FileDialog ...

    내 메인 스크립트를 수정하는 대신.

  4. ==============================

    4.문제가 PyQt4를 사용하기 때문에 Tkinter와 친구들이 필요 없다면, Tkinter 등을 로딩하지 않는 것이 가장 좋습니다. / etc / matplotlibrc을보고 기본값을 PyQt4로 변경하십시오. 아래의 '수정 된'줄을보십시오 :

    문제가 PyQt4를 사용하기 때문에 Tkinter와 친구들이 필요 없다면, Tkinter 등을 로딩하지 않는 것이 가장 좋습니다. / etc / matplotlibrc을보고 기본값을 PyQt4로 변경하십시오. 아래의 '수정 된'줄을보십시오 :

    #### 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
    
  5. ==============================

    5.나는 pyinstaller 3.0과 weblib에서 같은 문제가 있었다. 메인에서 가져 오기가 도움이되지 않았습니다.

    나는 pyinstaller 3.0과 weblib에서 같은 문제가 있었다. 메인에서 가져 오기가 도움이되지 않았습니다.

    3.1로 업그레이드하고 모든 빌드 파일을 삭제하면 도움이됩니다.

    pip install --upgrade pyinstaller
    
  6. from https://stackoverflow.com/questions/25733467/no-module-named-when-using-pyinstaller by cc-by-sa and MIT license