Как я могу автоматически конвертировать python в exe в коде

Я хочу динамически преобразовать файл python в файл .exe. Я уже пытался использовать auto-py-to-exe, но это связано с использованием графического интерфейса и не требует программного преобразования файла.

Взяв пример кода, представленного ниже, я хочу преобразовать файл second.py в файл .exe, используя только код и без каких-либо ручных действий.

first.py -:

import os

code = """
print(hello world)
"""

with open("second.py", "w") as second_file:
        second_file.write(code)

convert_to_exe('second.py') # Yet not clear, on how to achieve this.

Вы пытались решить проблему самостоятельно? На какие источники вы ссылались, прежде чем задать этот вопрос? Пожалуйста, прочитайте Как спросить

typedecker 30.06.2023 13:03

почему я задаю вопрос, если я могу ответить на него в первую очередь

Prison Mike 30.06.2023 13:16

Дело не в том, чтобы ответить на вопрос, а в том, чтобы заранее провести соответствующее исследование, прежде чем задавать вопрос. В отличие от других веб-форумов, на Stack Overflow есть одно из правил задавать вопросы: «Исследуй, прежде чем спрашивать». Если вы даже не пытались найти решение этой проблемы где-либо еще в Интернете, то, скорее всего, она может быть решена и уже решена, и вы заполняете веб-сайт ненужным новым вопросом. Конечно, мы все здесь, чтобы помогать друг другу, но только тогда, когда помощь действительно нужна и другого источника информации нет.

typedecker 30.06.2023 13:21

Если бы у вас был вопрос относительно чего-то очень простого, что можно было найти где угодно в Интернете, а кто-то другой на следующий день задал бы тот же вопрос, поскольку у него были бы такие же сомнения, сайт был бы заполнен повторяющимися вопросами. Этот сайт был создан специально для того, чтобы обеспечить надежное хранилище всех знаний по программированию для программистов, чтобы они могли использовать их всякий раз, когда они сталкиваются с проблемой, но задают вопрос, на который уже был дан ответ во многих других местах в Интернете, и его можно легко найти с помощью некоторых исследований. является избыточным. Кроме того, все это является частью правил сайта.

typedecker 30.06.2023 13:23

да, я на самом деле пытаюсь найти решение часами, я просто не мог найти нужное мне решение

Prison Mike 30.06.2023 13:25

О, я вижу, было бы полезно решить проблему, если бы вы могли связать источники, которые вы посетили, чтобы попытаться найти решение этой проблемы. :D

typedecker 30.06.2023 13:26
datacamp.com/tutorial/… теперь это хорошо для ручной сборки exe-файла, но я хочу автоматизировать весь процесс
Prison Mike 30.06.2023 13:28

сделать, вызвать, сделать?

rasjani 30.06.2023 13:42

@rasjani извините, я не понимаю, что вы имели в виду

Prison Mike 30.06.2023 13:44

@PrisonMike Вы изучали cx_freeze? Также можете ли вы точно указать, каким образом вы ожидаете программно/динамически создать exe? Каковы будут ваши конфигурации для него? Как он узнает, какой файл выбрать и откуда?

typedecker 30.06.2023 13:47

@typedecker, пожалуйста, посмотрите отредактированный вопрос...

Prison Mike 30.06.2023 14:04

@PrisonMike Хорошо, если вы исследовали эту область, вы, должно быть, заметили, что каждая программа имеет различную конфигурацию и зависит от модулей, методов и многих других обстоятельств, используемых файлов и зависимостей, а также типа требуемого файла .exe. , способ создания исполняемого файла может отличаться. В основном создание исполняемого файла включает в себя Freezing используемых сценариев, и для этой цели программа должна быть снабжена всеми зависимостями. Один из способов добиться этого — использовать cx_freeze , docs

typedecker 30.06.2023 14:09
pyinstaller.org/en/stable
Kostas Nitaf 30.06.2023 14:09

@typedecker хорошо, спасибо, я проведу больше исследований по этому вопросу

Prison Mike 30.06.2023 14:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
14
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Не существует одного очень чистого способа создать исполняемый файл на python, но вы можете объединить две библиотеки, чтобы выполнить работу:

  1. подпроцесс
  2. pyinstaller

Вы можете использовать subprocess.run('pyinstaller', '--onefile', 'pythonScriptName.py'), чтобы получить нужную вам функциональность.

Вы можете ознакомиться с документацией pyinstaller, чтобы добавить дополнительные аргументы в команду.

Добавив это, ваша программа будет выглядеть так:

import os
import subprocess

code = """
print(hello world)
"""

with open("second.py", "w") as second_file:
        second_file.write(code)

subprocess.run('pyinstaller', '--onefile', 'secondfile.py')

Вы также можете использовать библиотеку подпроцессов для запуска этого недавно созданного исполняемого файла, если это то, что вы ищете.

Глядя на вопрос и основываясь на разговоре, который у меня был в комментариях, кажется, что цель здесь - создать exe динамически/программно (полностью используя код). Есть много способов добиться этого, один из них — использование модуля cx_freeze.

Используя этот модуль, вы можете написать сценарий установки для exe, а затем использовать команду для сборки exe -:

import sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {
    "excludes": ["tkinter", "unittest"],
    "zip_include_packages": ["encodings", "PySide6"],
}

# base = "Win32GUI" should be used only for Windows GUI app
base = "Win32GUI" if sys.platform == "win32" else None

setup(
    name = "guifoo",
    version = "0.1",
    description = "My GUI application!",
    options = {"build_exe": build_exe_options},
    executables=[Executable("guifoo.py", base=base)],
)

Сборка exe -:

python setup.py build

(из документов)

Результат выполнения этой команды описан в документации следующим образом:

Эта команда создаст подкаталог build с дополнительным подкаталогом, начинающимся с букв exe. и заканчивая типичным идентификатором платформы и версии Python. Это позволяет создавать несколько платформ без конфликтов.


Кроме того, если вы хотите создать исполняемый файл полностью с использованием кода без какой-либо отдельной ручной работы, конфигурации все равно должны быть установлены, но кроме этого вы можете использовать метод subprocess модуля call с shell = True в качестве аргумента для запуска команды -line также программно. Примерно так -:

import subprocess

def create_exe(code, excludes, zip_include_packages, name, version, description) :
    with open('source_for_exe_file.py', 'w') as f :
        f.write(code)
    
    setup_script = 'import sys\nfrom cx_Freeze import setup, Executable\n# Dependencies are automatically detected, but it might need fine tuning.\nbuild_exe_options = {"excludes" : {excludes}, "zip_include_packages" : {zip_include_packages},}\n# base = "Win32GUI" should be used only for Windows GUI app\nbase = "Win32GUI" if sys.platform == "win32" else None\nsetup(name = {name}, version = {version}, description = {description}, options = {"build_exe" : build_exe_options}, executables = [Executable("source_for_exe.py", base = base)],)'.format(excludes = excludes, zip_include_packages = zip_include_packages, name = name, version = version, description = description)
    with open('setup.py', 'w') as f :
        f.write(setup_script)
    
    result = subprocess.call('python setup.py build', shell = True)
    return result # Just returning any command line output.

Обратите внимание, что предоставленный код не тестировался, и поэтому его надлежащая функциональность неясна, учитывая отсутствие надлежащего объяснения того, какой код можно ожидать. Также обратите внимание, что результатом этой функции будет создание исполняемого файла в подпапке папки сборки, как указано в первом подходе. Единственная разница здесь в том, что ручное выполнение команды не использовалось.


Кроме того, как упоминалось ранее в ответе, существует несколько других способов добиться того же, один из таких способов - использовать pyinstaller следующим образом:

import PyInstaller.__main__

PyInstaller.__main__.run([
    'second.py',
    '--onefile',
    '--windowed'
])

Обратите внимание, что это было частично взято из документов, с единственной модификацией, заключающейся в изменении имени файла, но это жизнеспособный и более упрощенный подход, если игнорировать сложные различия.

Кроме того, поскольку в вопросе упоминался py2exe, я бы посоветовал взглянуть на этот источник. Это учебник по созданию исполняемого файла с использованием сценария установки, аналогичного cx_freeze подходу, продемонстрированному выше, но с преимуществом простоты. Однако я должен упомянуть, что учебник, похоже, был написан для python 2.0, и любые изменения в методе, описанном в нем, могут привести к тому, что он не будет работать для python 3.0.

Другие вопросы по теме