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"
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)从根目录(安装了应用程序)开始搜索(通过Ubuntu来宾系统下的grep -Rna
命令,对我来说更方便),并且可以在目录中找到易变的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)(用this question解决)这两点:文件包含源路径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
级别:)但是对于大型项目来说,这看起来很奇怪。
答案 0 :(得分:2)
引用How to obfuscate Python source code:
这两种方法[使用pyobfuscate和分配字节码]实际上只是一种威慑力,而不是一种安全的隐藏代码的方式。
如果您想要更强大的功能,应该看看Nuitka,它将Python代码编译为C ++,因此您可以对其进行编译并仅分发可执行文件。它似乎与不同的库和不同版本的Python广泛兼容。
答案 1 :(得分:0)
此video可能会有所帮助。 它讨论了cxfreeze以及如何使用cxfreeze使其成为可执行文件,而且我知道它适用于3.4+,因为视频使用python 3.4,但实际上您的方法应该没问题...
答案 2 :(得分:0)
如果我正确理解了您的问题,则可能是您想要的答案-Python cx_Freeze for two or more python files (modules)