web-dev-qa-db-ja.com

python .exeが正しく機能しない

pythonスクリプトを実行可能プログラムに変換するためにpyinstallerをダウンロードしました。実行すると、2つのボタン(button1を持つウィンドウが表示されるメインスクリプト((homepage.py)およびbutton2)。2つのボタンのそれぞれをクリックすると、対応するpythonスクリプト(input1.pyまたはinput2.py)が実行され、ユーザーがグラフ化するデータを入力するウィンドウが表示されます。 Excel。

私のスクリプトは、Anacondaを介してSpyderで実行すると正しく動作します。しかし、メインスクリプト(Homepage.py)を実行可能プログラムに変換して実行すると、2つのボタンのあるメインウィンドウが表示されますが、2つのボタンのいずれかをクリックすると、対応するウィンドウが表示されず、プログラムが閉じます。 。なぜそれが起こるのか誰か知っていますか? home1.pyと同様に、input1.pyとinput2.pyを.exeプログラムに変換する必要がありますか?

スクリプトで、いずれかのボタンをクリックする必要がある場合は、メインウィンドウを非表示にし、新しいウィンドウを表示します。 Spyderで動作している場合でも、プログラムが正しく機能しない原因は何ですか?

メインウィンドウ(homapge.py)のインポートとクラス名、

from PyQt5 import QtCore, QtGui, QtWidgets
from input1 import Ui_input1
from input2 import Ui_input2

class Ui_homepage(object):

button1(input1.py)インポートとクラス名、

from PyQt5 import QtCore, QtGui, QtWidgets
import csv, os, subprocess, output1

class Ui_input1(object):

button2(input2.py)インポートとクラス名、

from PyQt5 import QtCore, QtGui, QtWidgets
import csv, os, subprocess, output2

class Ui_input2(object):

また、input1.pyとinput2.pyの両方の内部には、クリックするとメインウィンドウ(homepage.py)に戻るボタン関数があり、その関数内にインポートします。

from homepage import Ui_homepage

Homepage.py、input1.py、input2.pyの最後に、このインポートがあります。

if __name__ == "__main__":
    import sys

さらに説明やコードが必要かどうかをお知らせください。

編集1:

メインウィンドウ(homepage.py)でbutton1を呼び出すコードを使用しています。

self.button1.clicked.connect(self.displayWindow1)

def displayWindow1(self):
    self.window = QtWidgets.QMainWindow()
    self.uiInput1 = Ui_input1()
    self.uiInput1.setupUi(self.window)
    self.homepage.hide()
    self.window.showMaximized()

メインウィンドウ(homepage.py)でbutton2を呼び出すコードを使用しています。

self.button2.clicked.connect(self.displayWindow2)

def displayWindow1(self):
    self.window = QtWidgets.QMainWindow()
    self.uiInput2 = Ui_input1()
    self.uiInput2.setupUi(self.window)
    self.homepage.hide()
    self.window.showMaximized()

編集2

変更後、プログラムを実行してみましたが、

from input1 import Ui_input1
from input2 import Ui_input2

に、

import input1 
import input2

pyinstaller --onefile --windowed homepage.exeと入力した後、コマンドプロンプトウィンドウでこのエラーが発生しました

25160 WARNING: lib not found: MSVCR90.dll dependency of c:\users\bj914e
\appdata\local\continuum\anaconda3\Library\bin\zlib.dll

これらのエラーはwarnhomepage.txtファイルで取得しました。

missing module named resource - imported by posix, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py
missing module named posix - imported by os, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py
missing module named _posixsubprocess - imported by subprocess, C:\Users
\bj914e\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named org - imported by pickle, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py
missing module named readline - imported by cmd, code, pdb, C:\Users
\bj914e\Desktop\DAMS\DAMS_Version_4\homepage.py
excluded module named _frozen_importlib - imported by importlib, 
importlib.abc, C:\Users\bj914e\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named _frozen_importlib_external - imported by 
importlib._bootstrap, importlib, importlib.abc, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py
missing module named _winreg - imported by platform, C:\Users\bj914e
\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named _scproxy - imported by urllib.request
missing module named Java - imported by platform, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py
missing module named 'Java.lang' - imported by platform, C:\Users\bj914e
\Desktop\DAMS\DAMS_Version_4\homepage.py, xml.sax._exceptions
missing module named vms_lib - imported by platform, C:\Users\bj914e
\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named termios - imported by tty, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py, getpass
missing module named grp - imported by shutil, tarfile, C:\Users\bj914e
\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named pwd - imported by posixpath, shutil, tarfile, 
http.server, webbrowser, C:\Users\bj914e\Desktop\DAMS\DAMS_Version_4
\homepage.py, netrc, getpass
missing module named _dummy_threading - imported by dummy_threading, 
C:\Users\bj914e\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named 'org.python' - imported by copy, C:\Users\bj914e
\Desktop\DAMS\DAMS_Version_4\homepage.py, xml.sax
missing module named cPickle - imported by xlsxwriter.compat_collections
missing module named cStringIO - imported by cPickle
missing module named copy_reg - imported by cPickle, cStringIO
missing module named StringIO - imported by xlsxwriter.compatibility

更新:

問題を解決することができました。非常にシンプルなソリューションであることがわかりました。ボタンの1つをクリックした後、プログラムは閉じましたが、コマンドプロンプトウィンドウが表示され、以下のソリューションで言及されるまで気付かなかったミリ秒以内に消えました。解決策は、input1.pyおよびinput2.pyが使用するデータファイルのallを.exeプログラムを使用してdistファイルに移動することでした。

PS:一部の録画プログラムは、表示されたり消えたりするウィンドウを記録するには遅すぎるため、スマートフォン(iPhone)カメラで試してみたところ、検出できました。

6
prexos

私は非常に類似した問題を抱えていました、問題は欠落しているモジュールでした。あなたのexeはpyinstallerが検出しなかった他のモジュールを使用するかもしれません。私にとって、Decimalモジュールをインポートするとすぐに、私のexeは魅力的なものになりました! homepage.exeが閉じたり、クラッシュしたりすると、不足しているモジュールがわかります。ミリ秒しか表示されません。画面を録画し、フッテージを遅くしてエラーメッセージを表示しました。型破りかもしれませんが、私にとってはうまくいきました!

2
KMoe

これに遭遇したようです ここでの問題 (基本的には同じですが、TKinterを使用しています)。

提案( もう一度リンク )は、モジュールのようにファイル全体をhomepage.pyプログラムにインポートすることでした。

だから変更:

from input1 import Ui_input1
from input2 import Ui_input2 

に:

import input1 
import input2 

それがうまくいく方法を教えてください:-)

0
WoodyDev