Как скомпилировать несколько .py файлов в один без импорта?
В первом скрипте "main.py" нет импорта второго файла "my_file2.py". Там в конце цикла прописано: subprocess.Popen([sys.executable, path+"my_file2.py"])
Вот этот второй файл "my_file2.py" мне нужно добавить к "main.py" и поместить в один ".exe" . Я объединяю эти файлы в одну папку "data", и запускаю команду ниже, но она не добавляет "my_file2.py" к "main.py":
pyinstaller --onefile ./data/main.py
Есть ли вариант, кроме импорта в main.py?
Ответы (2 шт):
Написать скрипт школьного уровня сложности, который соединяет все Ваши скрипты в один в том порядке, в котором Вам нужно, просто как текстовые файлы, таким образом избавляя от необходимости каких-либо подобных импортов. Последним в результат добавляется главный скрипт. Каждый из остальных скриптов должен содержать ту самую рабочую функцию (то есть, импортируется не файл по имени, а функция из файла). Первой в результат добавляется библиотека функций. В ней также содержится некие стартовые команды, формирующие среду.
Вот пример того, как это использую я лично (содержимое скрипта для сборки результирующего скрипта небольшого приложения и его компиляции):
#-------------------------------------------------------------------------
# Компіляція скрипта
#-------------------------------------------------------------------------
import os as os
import py_compile
print("-" * 50 + "\nКомпіляція скрипта\n" + "-" * 50)
v_py = ".\\graphic.py"
v_compiled = ".\\graphic.pyc"
v_files = (
"..\\LIBRARY\\library.py",
".\\graphic_exit.py",
".\\graphic_export.py",
".\\graphic_create.py",
".\\graphic_info.py",
".\\graphic_main.py"
)
with open(v_py, "w", encoding = "utf-8") as h:
for i in v_files:
with open(i, "r", encoding = "utf-8") as h_i:
print("Додавання:", i)
h.writelines(h_i.readlines())
py_compile.compile(v_py, v_compiled)
print("\nНатисність будь-яку клавішу для продовження...")
os.system("pause > nul" if os.name == "nt" else "read > /dev/null")
Компилировать в .pyc необязательно, но я в тестовом режиме запускаю скрипт именно как .pyc. Если такое приложение работает автономно при запуске в ОС, а не из оболочки разработки, значит и сборка, сделанная с помощью pyinstaller, будет работать.
Благодарю всех за предложенные варианты и советы. Нашел наиболее простой выход: скомпилировать "my_file2.py" в .exe формат и из файла "main.py" в subprocess.Popen() запускать уже "my_file2.exe":
subprocess.Popen(path+"my_file2.exe")
После этого отдельно компилировался уже сам "main.py"
Переписывание подThreading
и multiprocessing
вызвало дополнительные сложности и ошибки.