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

image-20221008222110268

image-20221008222136848

4)交付的时候,只用交付pyc文件就可以,再写一个bash脚本,直接启动pyc就可以了

python hello.cpython-39.pyc

image-20221008222233101

如何写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的一种持久化保存方式。

posted @ 2022-10-08 22:52  bH1pJ  阅读(275)  评论(0编辑  收藏  举报