python venv 项目移植到其它机器

引言

就在刚刚,接了一个PDF数据提取的项目,因为格式不统一,需要OCR识别,并且还需要自然语言处理,因为项目比较急,选择python开发,因为PDF数据比较敏感,不能发给我本地处理,所以需要在他们的机器上执行,选择pyinstaller打包其实也是个比较不错的选择,但是效率比较低,打包起来可能存在一些其它问题。

准备阶段

  1. 下载开发版的python安装包
  2. 使用virtualenv创建项目
    image.png

安装需要的依赖

⚠ 这里安装的依赖必须在虚拟环境中安装
image.png
注意前面的(venv),这代表着在虚拟环境中,也可以在venv\Scripts下执行pip进行安装

构建启动脚本

  1. 把安装包中的python解压(你可以选择在沙箱或者虚拟机中安装),这里为什么不选择系统中安装的python是因为更加简洁(如图,把python复制到项目路径中,如:python310)
    image.png
    image.png
  2. 修改激活脚本和配置文件

    这里我使用了python进行处理

    ```python
    import os

    base_dir = os.path.abspath('.')
    activate_path = os.path.join(base_dir, 'venv', 'Scripts', 'activate.bat')
    env_cfg_path = os.path.join(base_dir, 'venv', 'pyvenv.cfg')
    with open(activate_path, 'r', encoding='gbk') as f:
    txt = f.read()
    txt = txt.replace(r'xxxxxxxxxx', os.path.join(base_dir, 'venv'))
    with open(activate_path, 'w', encoding='gbk') as f2:
    f2.write(txt)

    os.system("")
    os.system(activate_path)

    with open(env_cfg_path, 'r', encoding='gbk') as f:
    txt = f.read()
    txt = txt.replace(r'xxxxxxxxxx', os.path.join(base_dir, 'python310'))
    with open(env_cfg_path, 'w', encoding='gbk') as f2:
    f2.write(txt)
    with open("run.bat", 'w') as f:
    f.write("cd " + base_dir + "\n")
    f.write(base_dir[0:2] + " \n")
    f.write("call " + activate_path + "\n")
    f.write("python main.py\n")

    os.system("run.bat")
    ```

注意代码中的xxxxxxxxxx,需要修改成原来文件中的内容
ℹ:这个代码是修改配置文件,最后启动run.bat,run.bat将会启动activate.bat,进入到虚拟环境中,并且执行main.py, main.py 是主程序入口
3. 执行start.py
image.png

结语

这个方法适用于没有python环境,或者存在多个环境的机器,原理都是相似的,上面的只适用于windows系统,如果是其它系统,把python换成相应的版本,并且修改activate.bat的代码换成对应系统的,如linux的activate,修改VIRTUAL_ENV字段的值,配置文件路径修改成正确的路径,并且最终启动的os.system("run.bat")改成相应的命令即可。

修改的文件

activate.bat
pyvenv.cfg

建议

如果频繁修改文件路径,start.py 就不能这么写了,因为这只能修改1次。

评论 0

还没有评论,来说点什么吧。

提交后需要审核才会公开。