Конверт:
Windows 10
python 3.6.6
cx-Freeze 5.0.2
Для установки требуется .msi
Пример структуры проекта:
/package_name
/some_packet
/__init.py
/module_name.py # for an example contains valiable in code "module_1"
/main.py
/setup.py
/some_module.py # for an example contains valiable "module_2"
/some_other_module.py # for an example contains valiable "module_3"
Пример файла setup.py (упрощенно)
import cx_Freeze
cx_Freeze.setup(
name="example",
options={
"build_exe": {
"packages": ["asyncio"],
"include_files": ["static\some_static_file.png"]
},
"bdist_msi": {
"upgrade_code": "{492de237-1853-4599-a707-c283d567699f}"
}
},
executables=[cx_Freeze.Executable("main.py")]
)
Текущее поведение
Для создания .msi
установочного файла -> запустить команду python setup.py bdist_msi
.Он будет генерировать .msi
файлов для установки приложения.
После установки этого приложения: каталог (в котором установлено приложение) будет содержать:
main.exe
lib\some_packet
каталог lib\some_packet\module_name.pyc
файл - другие файлы
Существуют следующие утверждения:
1) Из корневого каталога (где установлено приложение) я начинаю поиск (с помощью команды grep -Rna
в гостевой системе Ubuntu, это просто более удобно для меня), и допустимое значение module_1
можно найти в каталогах (в lib\some_packet\module_name.pyc
) и module_2
/ module_3
невозможно найти.
Подробности:
(v_decompile) any@any-pc:/mnt/hgfs/shar/example_installed$ grep -Rna "module_1"
lib/some_packet/module_name.pyc:2:B�!]�@dZdS)module_1N)r�rr�PG:\heroes\installer-with-cx_Freeze\sources_of_project\some_packet\module_name.py<module>s
(v_decompile) any@any-pc:/mnt/hgfs/shar/example_installed$ grep -Rna -a "module_2"
(v_decompile) any@any-pc:/mnt/hgfs/shar/example_installed$ grep -Rna -a "module_3"
2) Файл lib\some_packet\module_name.pyc
можно легко преобразовать в исходный файл (без комментариев), например, python-uncompyle6 .
Подробности:
(v_decompile) any@any-pc:/mnt/hgfs/shar/example_installed$ uncompyle6 lib/some_packet/module_name.pyc
# uncompyle6 version 3.3.3
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.6.6 (default, Jul 20 2018, 15:39:05)
# [GCC 4.8.4]
# Embedded file name: G:\heroes\installer-with-cx_Freeze\sources_of_project\some_packet\module_name.py
# Compiled at: 2019-07-07 11:28:50
module_1 = 'module_1'
# okay decompiling lib/some_packet/module_name.pyc
3) (решено с помощью этот вопрос ) В обоих пунктах: файл содержит исходный путь G:\heroes\installer-with-cx_Freeze\sources_of_project\some_packet\module_name.py
Это сбивает с толкуменя немногоПриложение было установлено с .msi
и (как я понимаю) не должно знать о исходных каталогах (относительно пути), которые использовались для создания последних.
Вопросы:
Есть ли способ восстановить some_module.py
и some_other_module.py
в исходные файлы из main.exe
? (Как это можно сделать с помощью lib\some_packet\module_name.pyc
)
Как "спрятать"некоторые другие файлы в приложении в main.exe
или как-то избежать преобразования .pyc
в исходные файлы (возможно, некоторые свойства в cx_Freeze
?)
Примечание:
Это должно быть сделано с cx_Freeze
.
PS: я не хочу создавать сингл .exe
.Я пытаюсь найти удобный способ указать, какие файлы должны храниться в main.exe
, как это было сделано с some_module.py
и some_other_module.py
PSS: В данный момент я вижу только один способ: положить все файлы наmain.py
уровень :) Но для большого проекта это будет выглядеть странно.