編譯python原始碼
阿新 • • 發佈:2020-08-09
https://blog.csdn.net/feijiges/article/details/77932382
https://www.icode9.com/content-1-644421.html
https://www.cnblogs.com/jclian91/p/10289820.html
https://mp.weixin.qq.com/s/TTUFQRQ_DiKktJ5-J8O8Pg
由於windows版本執行加密原始碼的命令會存在一定的問題,所以以下場景都是在linux環境上做的。
2、無法加密django的資料遷移檔案,即migrations目錄下的0***_initial.py等
3、批量加密目錄下的檔案時預設輸出是無序的(不是按照原目錄結構方式輸出)。
pip3 install cython
python setup.py build_ext
# setup.py from distutils.core import setup from Cython.Build import cythonize # 相對路徑:task.py和setup.py隸屬於同一目錄 setup(ext_modules=cythonize('task.py')) # 相對路徑:task.py和src在同一目錄 #setup(ext_modules=cythonize('src/task.py')) # 絕對路徑:task.py和src在同一目錄 #setup(ext_modules=cythonize('/var/mycode/src/task.py'))
加密的結果就是在當前目錄下生成build資料夾,在linux系統下生成的加密檔案是以so結尾的,而在windows下生成的是以pyd結尾的檔案。
# setup.py import os # 獲取當前檔案父目錄下的子目錄 src_path = [] path= os.path.dirname(os.path.abspath(__file__)) for p in os.listdir(path): p_inner = os.path.join(path, p) if os.path.isdir(p_inner): src_path.append(p_inner) # 遞迴獲取src_path裡每個目錄裡的要編譯的py檔案 py_files = [os.path.join(path, file_name) for compile_path in src_path for path, _, file_list in os.walk(compile_path) for file_name in file_list if file_name.endswith('.py')] print(py_files) from distutils.core import setup from Cython.Build import cythonize setup(ext_modules=cythonize(py_files))
src_dir = '/home/liuwei/mycode/project' to_encrypt = [os.path.join(path, file_name) for path, _, file_list in os.walk(src_dir) for file_name in file_list if file_name.endswith('.py')] setup(ext_modules=cythonize(to_encrypt))
python setup.py build_ext