Я создал скрипт finder.py
, используя PyQt5 для графического интерфейса.
Я скомпилировал скрипт в .exe с помощью PyInstaller в Windows, выполнив следующую команду из virtualenv:
pyinstaller finder.py
Однако, когда я пытаюсь открыть finder.exe (изнутри virtualenv или вне его), я получаю
ModuleNotFoundError: Нет модуля с именем `PyQt5 '
Как и в других ответах SO, я пытался передать комбинации -c
, -F
, --windowed
, --onefile
в качестве аргументов при создании исполняемого файла, но безрезультатно.
Как исправитьэто?
Полный finder.py
код:
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QWidget, QLabel, QLineEdit, QPushButton, QComboBox
from PyQt5.QtCore import QSize
import openpyxl as xl
import os
import xlrd
class Finder():
def __init__(self, directory, keywords, fileformats):
self.directory = directory
self.keywords = keywords
self.fileformats = fileformats
def filenames(self):
for root, dirs, filenames in os.walk(self.directory):
for filename in filenames:
if filename.endswith(self.fileformats):
yield os.path.join(root, filename)
def find_in_pdf(self):
for filename in self.filenames():
print(filename)
if filename.endswith(str(self.fileformats)):
try:
pdfFileObj = open(filename, 'rb')
print('opened')
except:
print('fail')
pass
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pageObj = pdfReader.getPage(0)
pdf_text = pageObj.extractText()
for keyword in self.keywords:
if keyword in pdf_text:
print('FOUND IN ' + filename)
# else:
# print('NOT FOUND')
print('THE END')
def find_in_excel(self):
for filename in self.filenames():
if filename.endswith(self.fileformats):
try:
wb = xlrd.open_workbook(filename)
except:
pass
print('Opened ' + filename)
for sheet in wb.sheets():
print('Searching in sheet ' + sheet.name)
rows = sheet.nrows
columns = sheet.ncols
for row in range(0, rows):
for column in range(0, columns):
#print('Cell value: ' + str(sheet.cell(row,column).value))
for keyword in self.keywords:
if keyword in str(sheet.cell(row,column).value):
#print('**************************************')
print(keyword, filename, sheet.name, row, column)
#print('**************************************')
print('THE END')
class FinderGUI(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setMinimumSize(QSize(1000, 200))
self.setWindowTitle("Finder")
self.dir_label = QLabel(self)
self.dir_label.setText('Lookup directory: ')
self.dir_input = QLineEdit(self)
self.keywords_label = QLabel(self)
self.keywords_label.setText('Keywords: ')
self.keywords_input = QLineEdit(self)
self.dropdown = QComboBox(self)
self.dropdown_label = QLabel(self)
self.dropdown_label.setText('File formats: ')
self.dropdown.addItems(['.xlsx, .xlsm, .xls', '.pdf', ])
search_button = QPushButton('Search', self)
self.dir_input.move(140, 20)
self.dir_label.move(20, 20)
self.keywords_input.move(140, 60)
self.keywords_label.move(20, 60)
self.dropdown.move(140, 100)
self.dropdown_label.move(20, 100)
search_button.move(20,155)
self.dir_input.resize(850, 32)
self.keywords_input.resize(850, 32)
search_button.resize(200,32)
self.dropdown.resize(200, 32)
search_button.clicked.connect(self.find)
def find(self):
lookup_dir = self.dir_input.text()
keywords = self.keywords_input.text()
fileformats = self.dropdown.currentText()
input_data = {'lookup_dir':lookup_dir, 'keywords':keywords, 'file_formats':fileformats}
finder = Finder(lookup_dir.replace('\\', '/'), keywords.split(', '), tuple(fileformats.split(', ')))
if '.pdf' in finder.fileformats:
finder.find_in_pdf()
else:
finder.find_in_excel()
#print(input_data)
return input_data
#directory.replace('\\', '/')
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
mainWin = FinderGUI()
mainWin.show()
sys.exit(app.exec_())