py文件如何变成pyc文件;使用pycharm生成一个项目文件的pyc文件,达到代码隐藏的效果;Python项目标准化发布流程(实现隐藏源代码和一键启动的功能)
py文件如何变成pyc文件,使用pycharm生成一个项目文件的pyc文件,达到代码隐藏的效果;如何快速地将py文件变成pyc文件,实现代码隐藏的效果?
1、什么是py文件,
Python的源代码文件,就是py文件;
2、什么是pyc文件
参考链接:
https://www.zhihu.com/question/30296617
1)完成模块的加载和链接;
2)将源代码翻译为PyCodeObject对象(这货就是字节码),并将其写入内存当中(方便CPU读取,起到加速程序运行的作用);
3)从上述内存空间中读取指令并执行;
4)程序结束后,根据命令行调用情况(即运行程序的方式)决定是否将PyCodeObject写回硬盘当中(也就是直接复制到.pyc或.pyo文件中);
5)之后若再次执行该脚本,则先检查本地是否有上述字节码文件。有则执行,否则重复上述步骤。
3、为什么要生成pyc文件
1)加密源代码:
.pyc文件是由.py文件经过编译后生成的字节码文件,其加载速度相对于之前的.py文件有所提高,而且还可以实现源码隐藏,以及一定程度上的反编译。比如,Python3.3编译生成的.pyc文件,Python3.4就别想着去运行啦!→_→
4、什么是.pyo文件?
和pyc文件类似;
以上无论是生成.pyc还是.pyo文件,都将在当前脚本的目录下生成一个含有字节码的文件夹__pycache__
5、如何快速地将py文件变成pyc文件,实现代码隐藏的效果?
1)写一个python文件
import json
import numpy as np
import pandas as pd
def fun():
print('func')
if __name__ == '__main__':
print("hello wrold")
fun()
2)在命令行中进行编译:
python -m py_compile hello.py
3)得到__pycache__
文件夹,里边的就是编译好之后的pyc文件
hello.cpython-39.pyc
4)交付的时候,只用交付pyc文件就可以,再写一个bash脚本,直接启动pyc就可以了
python hello.cpython-39.pyc
如何写bash脚本
请参考:
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
start cmd /c "call C:\Users\XXXX\anaconda3\Scripts\activate.bat&&call activate base&&call cd C:\Users\XXXX\Documents\GitHub\TPSkinRoll &&call python mainWindow.py"
https://blog.csdn.net/Hodors/article/details/127214226
6、使用pycharm生成一个项目文件的pyc文件,达到代码隐藏的效果;
好像没有这个功能,自己在anaconda prompt中进行手动的编译吧
编译的单个py文件
python -m py_compile hello.py
编译整个文件夹(相当于程序自己遍历整个文件夹,然后把里边的py文件变成pyc文件)
python -m compileall Project
Python项目标准化发布流程
1)对一个文件夹(项目)进行编译(项目里边有很多引用,包括自己写的模块):
python -m compileall TPSkinRoll
2)把编译好的文件中的所有py文件都给删除了;
3)然后把__pycache__
中的pyc文件拷贝到和py文件同级的地方
3)然后删除编译好的pyc文件名中的.cpython-39.
这样的字眼;
4)项目就编译好,可以发布了,实现了源代码隐藏的功能
5)在编写一个bash脚本进行一键启动,完美:
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
start cmd /c "call C:\Users\XXXX\anaconda3\Scripts\activate.bat && call activate base && call cd C:\Users\XXXX\Documents\GitHub\TPSkinRoll &&call python mainWindow.pyc"
6)需要注意的地方是:
- 需要在目标机器上安装anaconda、安装完之后还需要再安装一下依赖文件(到默认的环境中base)
pip install -r requirments.txt
- 根据anaconda的路径,修改bash脚本中的内容;
- 还需要把发布好的项目文件,拷贝到目标机上;
7、什么是pyd文件?
别在意,那只是Python的动态链接库。如果要深究,还得扯上C++的知识。
参考链接:
https://blog.csdn.net/weixin_36670529/article/details/106767455
Python是一门先编译后解释的语言。
我们先来说两个概念,PyCodeObject和pyc文件。我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。 当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,先对.pyc文件和.py文件的最近一次的修改时间进行判断,如果.pyc文件的修改时间晚于.py文件,说明.py文件中的源代码未修改过,则直接载入,否则就重复上面的过程。所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
中。当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,先对.pyc文件和.py文件的最近一次的修改时间进行判断,如果.pyc文件的修改时间晚于.py文件,说明.py文件中的源代码未修改过,则直接载入,否则就重复上面的过程。所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。