Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программа которая может создать копию самой себя. что то подобное существует?

Серебренников Леонид Алексеевич Мастер (1708), открыт 3 недели назад
Нужна программа которая выполняет роль HTML-редактора
С помощью которой нужно просто создавать странички по своему вкусу.
В программе должна быть функция "пере сборки проекта" в один exe-файл.
Этот новый exe-файл должен включать в себя все изменения последнего редактирования, также должна сохраняться весь изначальный функционал после пере сборки.
Также в программе должен быть запрос логина и пароля при запуске, и возможность его замены.
4 ответа
Татьяна Просветленный (32581) 3 недели назад
Создание программы, которая создает копию самой себя и выполняет роль HTML-редактора с возможностью пересборки проекта в один exe-файл, является сложной задачей, но она выполнима. Вот пример, как можно реализовать основные функции, описанные вами:

HTML-редактор: Для создания HTML-страничек.
Пересборка проекта в один exe-файл: Для этого потребуется компилятор или инструмент, который может упаковать проект в исполняемый файл.
Авторизация: Запрос логина и пароля при запуске и возможность их замены.
Для реализации этого проекта на Python можно использовать следующие инструменты и библиотеки:

PyQt5 или Tkinter для создания графического интерфейса HTML-редактора.
PyInstaller для сборки проекта в один exe-файл.
SQLite или файлы для хранения логина и пароля.
 import sys 
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QVBoxLayout, QWidget, QAction, QFileDialog

class HTMLEditor(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.textEdit = QTextEdit(self)
self.setCentralWidget(self.textEdit)

openFile = QAction('Open', self)
openFile.triggered.connect(self.openFile)

saveFile = QAction('Save', self)
saveFile.triggered.connect(self.saveFile)

self.toolbar = self.addToolBar('Toolbar')
self.toolbar.addAction(openFile)
self.toolbar.addAction(saveFile)

self.setWindowTitle('HTML Editor')
self.show()

def openFile(self):
fname = QFileDialog.getOpenFileName(self, 'Open file', '/home')[0]
if fname:
with open(fname, 'r') as f:
self.textEdit.setText(f.read())

def saveFile(self):
fname = QFileDialog.getSaveFileName(self, 'Save file', '/home')[0]
if fname:
with open(fname, 'w') as f:
f.write(self.textEdit.toHtml())

def main():
app = QApplication(sys.argv)
editor = HTMLEditor()
sys.exit(app.exec_())

if __name__ == '__main__':
main()
Пересборка проекта в exe-файл:
Создайте build.py, который будет использовать PyInstaller:
 import os 
import subprocess

def rebuild():
subprocess.call(['pyinstaller', '--onefile', 'main.py'])

if __name__ == "__main__":
rebuild()
АвторизацияИнтеграция всех частей:
Объедините все вышеуказанные части в один проект. Убедитесь, что программа проверяет аутентификацию перед запуском HTML-редактора.

Создание EXE-файла:
Убедитесь, что у вас установлен PyInstaller. Запустите build.py, чтобы создать исполняемый файл:
python build.py
Серебренников Леонид АлексеевичМастер (1708) 3 недели назад
Результат ответа нейронки?
Татьяна Просветленный (32581) Серебренников Леонид Алексеевич, нет
ТатьянаПросветленный (32581) 3 недели назад
с моего IDE vscode
Серебренников Леонид АлексеевичМастер (1708) 3 недели назад
только компилятор должен быть в теле exe-файла
ТатьянаПросветленный (32581) 3 недели назад
или stack overflow
Максим Оракул (93803) 3 недели назад
"должен включать в себя все изменения последнего редактирования"
Какие изменения? Редактор редактирует другие странички, а сам он неизменный же.
Серебренников Леонид АлексеевичМастер (1708) 3 недели назад
Функционал редактора можно оставлять статичным, а можно и обновляемым через интернет но это не принципиально.
важно чтобы внутри exe сохранялись изменения HTML кода.
Серебренников Леонид АлексеевичМастер (1708) 3 недели назад
Этапы запуска продукта:
1) инсталляция
2) редактирование HTML и другое.
3) сборка в новый exe со всеми описанными изменениями.
Jurijus Zaksas Искусственный Интеллект (429974) 3 недели назад
>важно чтобы внутри exe сохранялись изменения HTML
Ты, видимо, немножечко поехал мозгой. Это, разумеется, технически возможно, но!
Представь себе, что у тебя миллион проектов, и все хранятся внутри экзешника. Теперь представь себе, сколько он будет занимать места и сколько времени его будет проверять антивирус перед каждым запуском. Второй момент - обычно программы хранятся в директории program files, права на запись в которую по умолчанию есть только у администратора. То есть тебе твой редактор придется всегда запускать от имени администратора. А если ты вдруг забыл это сделать, то сохранить полдня работы не получится. Никак. Нафиг-нафиг такие приколы.
Сверхразум Оракул (50073) 3 недели назад
 import tkinter as tk 
from tkinter import messagebox
import os
import hashlib
import json

# Путь к файлу с данными пользователя
USER_DATA_FILE = "user_data.json"

# Функция для хеширования пароля
def hash_password(password):
return hashlib.sha256(password.encode()).hexdigest()

# Функция для загрузки данных пользователя
def load_user_data():
if os.path.exists(USER_DATA_FILE):
with open(USER_DATA_FILE, "r") as file:
return json.load(file)
else:
default_data = {"username": "admin", "password": hash_password("admin")}
with open(USER_DATA_FILE, "w") as file:
json.dump(default_data, file)
return default_data

# Функция для сохранения данных пользователя
def save_user_data(username, password):
with open(USER_DATA_FILE, "w") as file:
json.dump({"username": username, "password": hash_password(password)}, file)

# Функция для проверки логина и пароля
def authenticate(username, password):
user_data = load_user_data()
return user_data["username"] == username and user_data["password"] == hash_password(password)

# Функция для смены логина и пароля
def change_credentials():
def save_new_credentials():
new_username = new_username_entry.get()
new_password = new_password_entry.get()
save_user_data(new_username, new_password)
messagebox.showinfo("Успех", "Логин и пароль успешно изменены")
change_window.destroy()

change_window = tk.Toplevel(root)
change_window.title("Смена логина и пароля")

tk.Label(change_window, text="Новый логин").pack()
new_username_entry = tk.Entry(change_window)
new_username_entry.pack()

tk.Label(change_window, text="Новый пароль").pack()
new_password_entry = tk.Entry(change_window, show="*")
new_password_entry.pack()

tk.Button(change_window, text="Сохранить", command=save_new_credentials).pack()

# Функция для пересборки проекта
def rebuild_project():
os.system("pyinstaller --onefile main.py")
messagebox.showinfo("Успех", "Проект пересобран в exe-файл")

# Основная функция программы
def main():
global root
root = tk.Tk()
root.title("HTML-редактор")

# Функция для сохранения HTML
def save_html():
html_content = text_editor.get("1.0", tk.END)
with open("index.html", "w") as file:
file.write(html_content)
messagebox.showinfo("Успех", "HTML сохранен")

# Функция для входа в систему
def login():
username = username_entry.get()
password = password_entry.get()

if authenticate(username, password):
login_window.destroy()
create_editor()
else:
messagebox.showerror("Ошибка", "Неправильный логин или пароль")

# Создание окна авторизации
login_window = tk.Toplevel(root)
login_window.title("Вход")

tk.Label(login_window, text="Логин").pack()
username_entry = tk.Entry(login_window)
username_entry.pack()

tk.Label(login_window, text="Пароль").pack()
password_entry = tk.Entry(login_window, show="*")
password_entry.pack()

tk.Button(login_window, text="Войти", command=login).pack()

# Создание окна редактора
def create_editor():
global text_editor
text_editor = tk.Text(root)
text_editor.pack()

tk.Button(root, text="Сохранить HTML", command=save_html).pack()
tk.Button(root, text="Пересобрать проект", command=rebuild_project).pack()
tk.Button(root, text="Сменить логин и пароль", command=change_credentials).pack()

root.mainloop()

if __name__ == "__main__":
main()
Похожие вопросы