Env:
Windows 10
python 3.6.6
cx-Freeze 5.0.2
Git hub example
It contails .msi
for installing
Example project structure:
/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"
Example of setup.py(simplified)
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")]
)
Current behavior
For creating .msi
install file -> run command python setup.py bdist_msi
. It will generate .msi
files for installing application.
After installing this application: directory(where application is installed) will contain:
main.exe
lib\some_packet
directorylib\some_packet\module_name.pyc
file- other files
There are following statements:
1) From root directory(where application is installed) i start search(via grep -Rna
command under Ubuntu guest system, it's just more convenient for me) and valiable module_1
could be found in directories(in lib\some_packet\module_name.pyc
) and module_2
/module_3
couldn't be found.
Details:
(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) File lib\some_packet\module_name.pyc
could be easily converted to original file(without comments) by e.g. python-uncompyle6.
Details:
(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) (solved with this question) In both points: file contains source path G:\heroes\installer-with-cx_Freeze\sources_of_project\some_packet\module_name.py
It confuses me a bit. Application was installed from .msi
and (as I understand) should not know about source directories (regarding path) which was used for creating last one.
Questions:
Is there any way to recover
some_module.py
andsome_other_module.py
to original files frommain.exe
?(like it could be done withlib\some_packet\module_name.pyc
)How to "hide" some other files in application into
main.exe
or somehow avoid converting.pyc
to original files.(maybe some properties incx_Freeze
?)
Note:
It should be done with cx_Freeze
.
PS: I don't want to create single .exe
. I try to find convenient way for specifying which files should be stored in main.exe
like it was done with some_module.py
and some_other_module.py
PSS: At this moment I see only I way: put all files on main.py
level :) But it will look weird for big project.