python 转换成二进制文件可以再一定程度上起到加密作用, 封装成 whl 文件提供给用户方便安装。
1 转换
首先安装 cpython,
文件夹如下所示,
1 2 3 4 5 6 7 8 9 10 your_project/ │ ├── src/ │ ├── your_module/ │ │ ├── __init__.py │ │ ├── main_script.py │ │ └── assets/ │ │ └── image.png │ └── setup.py
编写 setup.py 文件,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from setuptools import setup, Extensionfrom Cython.Build import cythonizeimport osdef find_py_files (package_name ): """查找指定包下的所有 .py 文件""" py_files = [] for root, _, files in os.walk(package_name): for file in files: if file.endswith(".py" ): py_files.append(os.path.join(root, file)) return py_files package_name = "AAO" py_files = find_py_files(package_name) setup( name=package_name, ext_modules=cythonize(py_files, compiler_directives={'language_level' : "3" }), )
转换成二进制文件,执行命令,
1 python setup.py build_ext --inplace
删除文件夹中的 py 源码文件。
2 封包
首先安装 wheel 。
1 2 pip install wheel python -m pip install wheel
文件夹如下所示,
1 2 3 4 5 6 7 8 9 10 your_project/ │ ├── src/ │ ├── your_module/ │ │ ├── __init__.py │ │ ├── main_script.py │ │ └── assets/ │ │ └── image.png │ └── setup.py
setup.py 代码如下,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from setuptools import setup, find_packagessetup( name="AAO" , version="0.1.0" , description="Accelerated Automated Optimization Tool" , author="LDA" , packages=find_packages(), install_requires=[ "pyautogui" , "numpy" , ], include_package_data=True , package_data={ 'AAO' : ['images/gui_img/*.png' , 'images/gui_img/*.ico' , '*.pyd' ], }, )
执行以下命令封包,
1 python setup.py bdist_wheel
3 安装
安装包,执行,
1 2 pip install xx.whl python -m pip install xx.whl
4 总结
二进制打包成 whl 文件时,会出先部分文件未打包,或者多打包的情况。
其中,文件多出现,删除编译生成的文件宠幸封包即可。
部分文件未打包需要确认 __init__.py 最好保留在包里,以及文件是否包含在 package_data 中。
⚓ Carl Zhao 🏢 逍遥科技有限公司 💭 曾经也是追光少年,然而少年归来已不再是少年,但依然在追光的路上。 📧 邮箱:1005513510@qq.com