Python项目打包(一):利用compileall将py项目打包成pyc项目

在进行python项目开发的时候一定会涉及到项目打包这个环节,有时因为一些依赖的原因没法打包成一个大的可执行文件,但为了代码的安全性我们最起码需要打包成pyc的预编译格式,这样运行者(一般是测试和线上部署)在无法看到程序源码的同时也能顺利执行程序功能(后续有机会可以讲讲反编译过程)。
本文主要是分两步完成:
1. 用python设计打包程序pack_pyc.py
2. 因为我是在windows环境下运行的,所以用脚本设计执行文件pack_pyc.bat。保证将文件夹拖到bat文件上能够自动打包。

pack_pyc.py完整代码如下:

import argparse
import datetime
from pathlib import Path
import os
import shutil
import compileall

def main():
    parser = argparse.ArgumentParser()  # 获取项目的parameters
    parser.add_argument("src", type=Path)
    args = parser.parse_args()
    root = args.src  # 根目录
    for src_file in root.rglob("*.pyc"):  # 先删除根目录下的pyc文件
        os.remove(src_file)
    compileall.compile_dir(root, force=True)  # 将项目下的py都编译成pyc文件
    current_day = datetime.date.today()  # 当前日期
    edition = "1.1.2"  # 设置版本号
    dest = root.parent / f"{root.name}_{edition}.{'001'}_beta_{current_day}"  # 目标文件夹名称
    for src_file in root.glob("**/*.pyc"):  # 遍历所有pyc文件
        relative_path = src_file.relative_to(root)  # pyc文件对应模块文件夹名称
        dest_folder = dest / str(relative_path.parent.parent)  # 在目标文件夹下创建同名模块文件夹
        os.makedirs(dest_folder, exist_ok=True)
        dest_file = dest_folder / (src_file.stem.rsplit(".", 1)[0] + src_file.suffix)  # 创建同名文件
        print(f"install {relative_path}")
        shutil.copyfile(src_file, dest_file)  # 将pyc文件复制到同名文件

if __name__ == '__main__':
    main()

pack_pyc.bat完整脚本如下:

@echo off
cd %~dp0
echo %*
python pack_pyc.py %*
pause

打包步骤图示:

将pack_pyc.bat和pack_pyc.py文件放到想要打包的项目同级文件夹下,然后将项目文件夹拖到bat文件上即可:

拖完就会立即执行打包程序,因为脚本设置了pause,所以你只需按任意键结束即可:

然后你就会发现你的文件夹下多了个打包项目:

打开看下就知道了,所有的py文件都编译成了pyc文件了:

想要执行项目只需要用脚本执行主程序即可:python main.pyc

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Python是一种解释型语言,而Java是一种编译型语言,两者的项目结构和打包方式有所不同。可以使用一些工具将Python项目打包可在Java项目中引用的jar包。 首先,我们需要将Python项目转换为Java可以使用的格式。这可以通过将Python代码转换为Java字节码来实现,一个常用的工具是Jython。Jython是一个将Python代码转换为Java字节码的解释器,它允许我们将Python代码打包一个jar文件。可以使用以下命令将Python项目转换为jar包: ``` jython -jar jython-standalone.jar -O -c "import compileall; compileall.compile_dir('path/to/python/project')" ``` 其中,`jython-standalone.jar`是Jython的jar文件路径,`path/to/python/project`是Python项目所在的路径。 接下来,我们需要将生的jar包引入到Java项目中。在Java项目的build文件中,添加对该jar包的依赖项。例如,如果使用Maven进行构建,可以在pom.xml文件中添加以下代码: ```xml <dependency> <groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version>2.7.2</version> <scope>system</scope> <systemPath>path/to/converted/python/project.jar</systemPath> </dependency> ``` 其中,`jython-standalone`是Jython的项目标识符,`2.7.2`是Jython的版本号,`path/to/converted/python/project.jar`是转换后的Python项目的jar包路径。 将Python项目打包为jar包并在Java项目中引用可以让我们在Java项目中直接使用Python代码,并且能够享受到Java的多线程和性能优势。但是需要注意,在Python代码中使用的Python库也需要转换为对应的Java库,否则可能会导致运行时错误。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trisyp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值