python内网环境安装第三方包

文章目录

  • 一、问题
  • 二、解决方法
  • 三、代码实现


一、问题

内网安装第三方包的应用场景,一般是一些需要在没网的环境下进行开发的情况。这些环境一般仅支持本地局域网访问,所以只能在不下载任何第三方包的情况下艰难开发。


二、解决方法

将当前应用依赖的第三方包提前下载到本地,拷贝到单机环境下安装,但是不能一个个下载安装,那样效率很低,具体参考以下代码,如有更好的办法希望大佬指点。


三、代码实现

import os
import time


def download_env_package(package_dir):
    '''
    下载当前虚拟环境已安装的第三方包的whl到本地
    :return:
    '''
    requirmenets_local_path = f'./requirements_local__{time.time()}.txt'

    if not os.path.exists(package_dir): os.mkdir(package_dir)

    # 将虚拟环境的包信息打印到 requirements.txt 中
    cmd_freeze = f'pip freeze > {requirmenets_local_path}'
    os.system(cmd_freeze)

    time.sleep(2)

    # 下载 requirements.txt 中的第三方包到本地
    cmd_download = f'pip download -r {requirmenets_local_path} -d {package_dir}'
    print(cmd_download)
    os.system(cmd_download)

    # 删除缓存的安装包文件
    os.remove(requirmenets_local_path)


def install_local_packages(package_dir):
    '''
    安装本地第三方包
    :return:
    '''
    package_path_list = [os.path.join(package_dir, name) for name in os.listdir(package_dir)]

    print('---------------------安装列表---------------------')
    for pc in package_path_list:
        print(pc)
    print('---------------------安装列表---------------------')

    # cmd_env_list = 'v'
    cmd_install_list = "pip install".split(' ')

    for idx, pc in enumerate(package_path_list):
        # print(f'当前进度: {idx+1} / {len(package_path_list)}')
        cmd_install_list.append(pc)

    os.system(' '.join(cmd_install_list))


if __name__ == '__main__':

    # 指定第三方包whl文件的存放目录
    package_dir = '../package_cache'
	
	# 下载
    # 此方法在有网的地方执行
    # 将当前虚拟环境下依赖的第三方包whl文件下载到指定目录
    download_env_package(package_dir)
	
	# 下载后将此脚本和下载好的第三方包目录一并复制到没网的机器上执行安装方法	

    # 安装
    # 此方法在没网的地方执行
    # 将指定目录下的whl文件安装到当前虚拟环境
    install_local_packages(package_dir)


你可能感兴趣的:(Python,python,windows,linux)