py文件转换成可执行文件,python怎么调用py文件
Pyc是一个二进制文件,由pyc文件编译生成。下面这篇文章主要介绍python中PYC文件和PYC文件相互转换的相关信息,有需要的可以参考一下。
00-10101、compileall py文件转换为pyc1.1、compileall命令行模式1.2、compileall源代码模式2、uncompyle6 pyc转换为py文件2.1、安装2.2、un compiled 6命令行模式2.3、un compiled 6代码模式总结本文以Python3.8为例,
目录
1、 compileall py文件转换为pyc
不需要额外安装,python自带模块。
可以使用Python -m在命令行模式下编译py文件。
Python -m编译器所有文件或路径选项
例如,要编译当前工作目录中的所有py文件:
python -m编译器。
或者:
python -m编译器。\
例如,要编译指定目录sub\dir中的所有py文件:
python -m编译器all sub\dir\
如果只编译了指定的test.py文件:
python -m编译器all test.py
注意命令行模式下,如果不指明文件或路径默认会将sys.path下的所有文件进行编译!.路径包括当前工作目录、Python安装目录、Python包目录等。
使用上面的编译命令后,将在py文件所在的目录下生成一个__pycache__文件夹。在这个__pycache__文件夹下,会根据py文件的名称和Python版本号生成一个对应的pyc文件。例如,对应于test.py文件,将生成_ _ py cache _ _ \ test . cpython-38 . pyc文件。
以下示例编译新文件夹中的py文件,您可以通过tree命令查看编译后的文件结构:
E:\juzicodepython -m编译器全新
列表“新”.
正在编译“new\\build.py”.
正在编译“new\\test.py”.
E:\juzicodetree new /f
xyz卷的文件夹路径列表
卷序列号是000000。
E: \汉字编码\新
build.py
test.py
__pycache__
build.cpython-38.pyc
test.cpython-38.pyc #生成的pyc文件的位置
使用python -m compileall -h查看帮助文档和可选项目的含义:
-l:不递归编译子文件夹;
-r级别:指定编译文件夹的层数,优先级高于-l;Level=0表示不进入下一级,levy=1表示进入第一级,level=2表示进入第二级,以此类推。
-f:强制重新编译一次,即使文件的时间戳没有更新。不使用-f选项时,如果py文件的时间戳早于pyc文件的时间戳,则不会触发编译过程;
-x REG:根据REG表示的正则表达式选择要编译的文件。
1.1、compileall命令行模式
Compileall还提供了编译py文件的源代码方法,同样会生成__pycache__文件夹以及该文件夹下的pyc。
文件。
首先导入compileall模块,使用compileall.compile_file(‘py文件名称’)编译py文件:
import compileallcompileall.compile_file(test.py)
-----结果:
Compiling test.py...
另外也可以使用compileall.compile_dir(‘路径名称’)编译某个路径下的py文件:
import compileallcompileall.compile_dir(new)
-----结果:
Listing new...
Listing new\\mod...
Compiling new\\mod\\mod.py...
Compiling new\\test.py...
Compiling new\\xyz.py...
还有一个不常用的方法是compileall.compile_path()会编译sys.path路径下的py文件。
2、uncompyle6 pyc转换为py文件
2.1、安装
可以使用uncompyle6将pyc文件转换回py文件,在Python3.8中需要额外安装uncompyle6模块:
pip install uncompyle6
安装之后就会在Python安装目录的scripts文件夹下生成一个uncompyle6.exe的可执行文件:
一般在安装时添加过安装目录到环境变量下,这时就可以直接运行uncompyle6。
2.2、uncompyle6命令行模式
下面这个例子用命令uncompyle6 test.pyc 解析test.pyc文件并输出解析后的内容:
E:\juzicode\pyc-2-py>uncompyle6 test.pyc
# uncompyle6 version 3.8.0
# Python bytecode 3.8.0 (3413)
# Decompiled from: Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:37:02) [MSC v.1924 64 bit (AMD64)]
# Embedded file name: test.py
# Compiled at: 2022-05-01 20:51:57
# Size of source mod 2**32: 60 bytes
import sys
print(sys.version)
# okay decompiling test.pyc
从解析的内容可以看到使用的uncompyle6的版本号、Python的版本号、编译成pyc时的编译时间、源代码的内容等。
上面这种命令方式只是将解析后的内容输出到控制台,如果要将解析结果生成py文件,则可以将打印输出重定向到文件里:
uncompyle6 test.pyc > test.py
这样在当前目录下就生成了一个test.py文件,文件内容和前述例子打印输出内容一致。
另外一种方法是使用-o选项+目标文件路径+pyc文件(可以是多个),在目标文件路径下输出和pyc同名的py文件:
E:\juzicode\pyc-2-py>uncompyle6 -o .\ build.pyc test.pyc
build.pyc --
test.pyc -- decompiled 2 files: 2 okay, 0 failed
# decompiled 2 files: 2 okay, 0 failed
2.3、uncompyle6代码模式
先用open方法创建一个文件实例pf,再使用decompile_file(‘pyc文件’,pf)函数将pyc文件转换为py文件:
import uncompyle6 as ucpf = open("test.py", "w")
uc.decompile_file("test.pyc", pf)
转换后的文件和用命令行方式内容一样,包含了编译时间、Python版本、源代码等。
总结
到此这篇关于python中py文件与pyc文件相互转换的文章就介绍到这了,更多相关pythonpy与pyc文件转换内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。