赞
踩
Nuitka的GitHub地址
在Nuitka之前我们最常用的打包工具就是Pyinstaller了,但是经过反复考虑,我觉得Nuitka也还是很有必要了解记录一下,它可以直接将Python源码打包成dll库或者pyd文件,增加了反编译难度,不会暴露源码,遗憾的是Nuitka和Pyinstaller一样不支持交叉编译
│ all_scheduling_info.json │ calculate_contract_code.json │ logger.py │ taskSend.py │ ├─.idea │ │ .gitignore │ │ misc.xml │ │ modules.xml │ │ taskAutomaticSend.iml │ │ workspace.xml │ │ │ └─inspectionProfiles │ profiles_settings.xml │ Project_Default.xml │ ├─lib │ │ __init__.py │ │ │ ├─api │ │ │ auth_rpc_api_pb2.py │ │ │ auth_rpc_api_pb2_grpc.py │ │ │ metadata_rpc_api_pb2.py │ │ │ metadata_rpc_api_pb2_grpc.py │ │ │ task_rpc_api_pb2.py │ │ │ task_rpc_api_pb2_grpc.py │ │ │ __init__.py │ │ │ │ │ └─__pycache__ │ │ auth_rpc_api_pb2.cpython-37.pyc │ │ auth_rpc_api_pb2_grpc.cpython-37.pyc │ │ metadata_rpc_api_pb2.cpython-37.pyc │ │ metadata_rpc_api_pb2_grpc.cpython-37.pyc │ │ task_rpc_api_pb2.cpython-37.pyc │ │ task_rpc_api_pb2_grpc.cpython-37.pyc │ │ │ ├─common │ │ │ base_pb2.py │ │ │ base_pb2_grpc.py │ │ │ data_pb2.py │ │ │ data_pb2_grpc.py │ │ │ __init__.py │ │ │ │ │ └─__pycache__ │ │ base_pb2.cpython-37.pyc │ │ data_pb2.cpython-37.pyc │ │ │ └─types │ │ header_pb2.py │ │ header_pb2_grpc.py │ │ identitydata_pb2.py │ │ identitydata_pb2_grpc.py │ │ messagehandler_pb2.py │ │ messagehandler_pb2_grpc.py │ │ metadata_pb2.py │ │ metadata_pb2_grpc.py │ │ resourcedata_pb2.py │ │ resourcedata_pb2_grpc.py │ │ taskdata_pb2.py │ │ taskdata_pb2_grpc.py │ │ types_pb2.py │ │ types_pb2_grpc.py │ │ __init__.py │ │ │ └─__pycache__ │ identitydata_pb2.cpython-37.pyc │ metadata_pb2.cpython-37.pyc │ resourcedata_pb2.cpython-37.pyc │ taskdata_pb2.cpython-37.pyc │ ├─log │ task_interface.log │ └─__pycache__ logger.cpython-37.pyc
要注意的是打包的时候自定义的模块下面的__init__.py不能被误删,例如要导入lib.types时如果types文件夹下的__init__.py如若被删了,则lib.types会打包失败,至于__init__.py是啥东西,学过python的都知道,这里就不做过多阐述
我们开始执行打包命令
nuitka --standalone --plugin-enable=pylint-warnings --output-dir=output taskSend.py
打包结束后切换到taskSend.dist目录下可以看到存在了taskSend.exe,且目录结构如下,可以看到已经不存在任何python源文件了
│ api-ms-win-core-console-l1-1-0.dll │ api-ms-win-core-datetime-l1-1-0.dll │ api-ms-win-core-debug-l1-1-0.dll │ api-ms-win-core-errorhandling-l1-1-0.dll │ api-ms-win-core-file-l1-1-0.dll │ api-ms-win-core-file-l1-2-0.dll │ api-ms-win-core-file-l2-1-0.dll │ api-ms-win-core-handle-l1-1-0.dll │ api-ms-win-core-heap-l1-1-0.dll │ api-ms-win-core-interlocked-l1-1-0.dll │ api-ms-win-core-libraryloader-l1-1-0.dll │ api-ms-win-core-localization-l1-2-0.dll │ api-ms-win-core-memory-l1-1-0.dll │ api-ms-win-core-namedpipe-l1-1-0.dll │ api-ms-win-core-processenvironment-l1-1-0.dll │ api-ms-win-core-processthreads-l1-1-0.dll │ api-ms-win-core-processthreads-l1-1-1.dll │ api-ms-win-core-profile-l1-1-0.dll │ api-ms-win-core-rtlsupport-l1-1-0.dll │ api-ms-win-core-string-l1-1-0.dll │ api-ms-win-core-synch-l1-1-0.dll │ api-ms-win-core-synch-l1-2-0.dll │ api-ms-win-core-sysinfo-l1-1-0.dll │ api-ms-win-core-timezone-l1-1-0.dll │ api-ms-win-core-util-l1-1-0.dll │ api-ms-win-crt-conio-l1-1-0.dll │ api-ms-win-crt-convert-l1-1-0.dll │ api-ms-win-crt-environment-l1-1-0.dll │ api-ms-win-crt-filesystem-l1-1-0.dll │ api-ms-win-crt-heap-l1-1-0.dll │ api-ms-win-crt-locale-l1-1-0.dll │ api-ms-win-crt-math-l1-1-0.dll │ api-ms-win-crt-process-l1-1-0.dll │ api-ms-win-crt-runtime-l1-1-0.dll │ api-ms-win-crt-stdio-l1-1-0.dll │ api-ms-win-crt-string-l1-1-0.dll │ api-ms-win-crt-time-l1-1-0.dll │ api-ms-win-crt-utility-l1-1-0.dll │ comctl32.dll │ dbghelp.dll │ libcrypto-1_1.dll │ libssl-1_1.dll │ pyexpat.pyd │ python37.dll │ select.pyd │ sqlite3.dll │ taskSend.exe │ tcl86t.dll │ tk86t.dll │ ucrtbase.dll │ unicodedata.pyd │ vcruntime140.dll │ _asyncio.pyd │ _bz2.pyd │ _ctypes.pyd │ _decimal.pyd │ _elementtree.pyd │ _hashlib.pyd │ _lzma.pyd │ _msi.pyd │ _multiprocessing.pyd │ _overlapped.pyd │ _queue.pyd │ _socket.pyd │ _sqlite3.pyd │ _ssl.pyd │ _tkinter.pyd │ ├─google │ └─protobuf │ ├─internal │ │ _api_implementation.pyd │ │ │ └─pyext │ _message.pyd │ ├─grpc │ └─_cython │ cygrpc.pyd │ ├─grpc_tools │ _protoc_compiler.pyd │ ├─lib2to3 │ Grammar3.7.8.final.0.pickle │ PatternGrammar3.7.8.final.0.pickle │ └─log task_interface.log
和window类似,它编译后的taskSend.dist目录如下
. ├── _asyncio.so ├── audioop.so ├── _bz2.so ├── certifi │ └── cacert.pem ├── _cffi_backend.so ├── _codecs_cn.so ├── _codecs_hk.so ├── _codecs_iso2022.so ├── _codecs_jp.so ├── _codecs_kr.so ├── _codecs_tw.so ├── cryptography │ └── hazmat │ └── bindings │ ├── _constant_time.so │ └── _openssl.so ├── _crypt.so ├── _csv.so ├── _ctypes.so ├── _curses_panel.so ├── _curses.so ├── _dbm.so ├── _decimal.so ├── _gdbm.so ├── google │ └── protobuf │ ├── internal │ │ └── _api_implementation.so │ └── pyext │ └── _message.so ├── grpc │ └── _cython │ └── cygrpc.so ├── grpc_tools │ └── _protoc_compiler.so ├── _hashlib.so ├── _json.so ├── libbz2.so.1.0 ├── libcrypto.so.1.1 ├── libdb-5.3.so ├── libexpat.so.1 ├── libffi.so.6 ├── libgcc_s.so.1 ├── libgdbm.so.5 ├── liblzma.so.5 ├── libmpdec.so.2 ├── libncursesw.so.5 ├── libpanelw.so.5 ├── libpython3.6m.so.1.0 ├── libreadline.so.7 ├── libsqlite3.so.0 ├── libssl.so.1.1 ├── libtinfo.so.5 ├── libuuid.so.1 ├── libz.so.1 ├── log │ └── task_interface.log ├── _lsprof.so ├── _lzma.so ├── markupsafe │ └── _speedups.so ├── mmap.so ├── _multibytecodec.so ├── _multiprocessing.so ├── _opcode.so ├── readline.so ├── _sqlite3.so ├── _ssl.so ├── taskSend └── termios.so
–mingw64 #默认为已经安装的vs2017去编译,否则就按指定的比如mingw(官方建议)
–standalone 独立环境,这是必须的(否则拷给别人无法使用)
–output-dir=output 生成exe到out文件夹下面去
–show-progress 显示编译的进度,很直观
–show-memory 显示内存的占用
–plugin-enable=numpy --plugin-enable=tensorflow 如果项目用到了numpy和tensorflow,需要添加该参数,可以认为和科学计算、机器学习相关的库或许都要用该参数特殊指定
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。