py文件批量转pyc并编译为pyd方法
最近研究了下py转pyc、pyd的问题,现分享一些知识碎片:
py转pyc
单个py文件转为pyc文件
在命令行中输入如下命令:
python -m py_compile hello.py
py批量转pyc
compileall.compile_dir(path, force=True)为path目录下的py文件产生pyc文件,force=True更新所有的pyc文件。
使用compileall得到pyc文件后。
1、将__pycache__文件夹下的内容粘贴到和__pycache__文件同目录下。
2、将pyc文件名改为与py文件相同的名字。如:app.cpython-37.pyc--》app.pyc
3、删除py文件
import os, shutil
import compileall
def copy_to_up(path):
for f in os.listdir(path):
if f == '__pycache__':
for f_main in os.listdir(os.path.join(path, f)):
path_src = os.path.join(path, f)
shutil.copy(os.path.join(path_src,f_main),path)
def rename_file(path):
for f in os.listdir(path):
if f.endswith('.pyc'):
f_new = f.replace('.cpython-37','')
os.rename(os.path.join(path, f), os.path.join(path, f_new))
def copy_rename(f, path):
# 如果是__pycache__ 文件夹 将其中的文件移至上一层
if f == '__pycache__':
copy_to_up(path)
#当前层为.pyc文件重命名
rename_file(path)
for pyf in os.listdir(path):
if pyf.endswith('.py') and not os.path.isdir(os.path.join(path, pyf)):
os.remove(os.path.join(path, pyf))
def py_to_pyc(path):
for f in os.listdir(path):
copy_rename(f, path)
if f != 'env' and f!='.vscode' and os.path.isdir(os.path.join(path, f)):
path_d = os.path.join(path, f)
print(path_d)
for f_d in os.listdir(path_d):
copy_rename(f_d, path_d)
if os.path.isdir(os.path.join(path_d, f_d)):
path_d_d = os.path.join(path_d, f_d)
print(path_d_d)
for f_d_d in os.listdir(path_d_d):
copy_rename(f_d_d, path_d_d)
if __name__ == '__main__':
path = r'C:\Users\Administrator\Desktop\mine'
compileall.compile_dir(path, force=True)
py_to_pyc(path)
py转pyd
使用easycython
https://pypi.org/project/easycython/
pyd不能直接python run,需要配合py或pyc引用它。