python 镜像环境搭建总结


Posted in Python onSeptember 23, 2022

取最小安装包

使用python-3.7.3-embed-win32,注意对:python37._pth的修改,修改方法:

# uncomment_pth.py
from pathlib import Path
def main(path_cur):
    for p in path_cur.glob('*._pth'):
        if not (p.suffix == '._pth' and p.stem.startswith('python')):
            continue
        print('found: ' + str(p))
        f_lines = []
        with p.open() as f:
            for line in f.readlines():
                if line.startswith('#import site'):
                    line = line.split('#', 2)[1]
                f_lines.append(line)
        with p.open('w') as f:
            f.writelines(f_lines)
        return True
    return False

if __name__ == '__main__':
    path_cur = Path('.')
    main(path_cur)

使用get-pip.py安装pip,并在有网终的情况下安装好环境

::first_install_with_net.bat
 
set old_dir=%cd%
 
cd /d "%~dp0"
 
python uncomment_pth.py
python get-pip.py
pip install devpi devpi-web
 
cd /d "%old_dir%"
pause

使用pip打包好环境,注意打包get-pip.py

::pkg_py_env.bat
 
set req=..\req_pkg_py_env.txt
set whs=..\wheels
pip freeze >%req%
pip wheel -r %req% -w %whs%
pip wheel pip -w %whs%
pip wheel setuptools -w %whs%
pip wheel wheel -w %whs%
pip uninstall wheel -y
pip uninstall setuptools -y
:: pip 不能用pip卸载自己,需要用下列语句
python -m pip uninstall pip -y
rd /s /q Lib
rd /s /q Scripts
pause

压缩清理后的环境,并传入有网络的环境后,解压基础环境

::unpkg_py_env.bat
 
set req=..\req_pkg_py_env.txt
set whs=..\wheels
set get-pip=%~dp0get-pip.py
set uncomment=%~dp0uncomment_pth.py
python %uncomment%
python %get-pip% --no-index --find-links=%whs%
set PATH=%PATHON_HOME%\Scripts
pip install  -r %req% --no-index --find-links=%whs%
 
pause

编写配置环境变量的脚本

:: py_env.bat
 
@echo off
set old_dir=%cd%
cd /d "%~dp0"
set PATHON_HOME=%cd%
set PATH=%PATHON_HOME%\;%PATHON_HOME%\Scripts;%PATH%
title Ptython Env:PATHON_HOME=%PATHON_HOME%
cd /d "%old_dir%"
 
if "%1" == "" call cmd 
 
REM @echo off
REM set PYTHONHOME=%cd%
REM set PATH=%PYTHONHOME%/Scripts;%PYTHONHOME%;%PATH%
 
REM set PYTHONPATH=%PYTHONHOME%/Lib
REM title %PYTHONHOME%\python.exe
REM call cmd

安装devpi-server服务,并初始化好环境,这里需要依赖nssm,需要自行下载,注意nssm需要管理员权限

::install_service.bat
 
set svr_name=devpi
set svr_dir=d:\devip_server_datas
cd /d "%~dp0"
::用于获取权限
nssm
call py_env.bat
devpi-init --serverdir %svr_dir%
devpi-gen-config --serverdir %svr_dir%
nssm install %svr_name% "%cd%\Scripts\devpi-server.exe" --serverdir %svr_dir% --host 0.0.0.0
pause
nssm start %svr_name%
devpi use root/pypi --always-set-cfg=yes
pause

如果不需要了,则卸载相关服务

::remove_service.bat
 
net stop devpi
nssm remove devpi confirm
pause

镜像更新问题

编写基础功能脚本文件, 并放到pythong.exe同级目录

# tasks.py
 
import datetime
import io
import os
from invoke import task
from tqdm import tqdm
 
# @task
# def package(c):
#     dir_path = datetime.datetime.now().strftime('%Y_%m_%d-%H_%m_%S-devpi_server_datas')
#     c.run(f'devpi-export.exe --serverdir D:\\devip_server_datas --include-mirrored-files {dir_path}')
#     c.run(fr'"C:\Program Files\WinRAR\Rar.exe" a {dir_path}.zip {dir_path}')
#     # print('hello')

@task(iterable=['p'])
def down(c, p):
    from pathlib import Path
    Path(r'tmp_whl_dirs').mkdir(exist_ok=True)
    c.run(fr'cd tmp_whl_dirs & pip download {" ".join(p)}')
@task
def up(c):
    dir_path = datetime.datetime.now().strftime('%Y_%m_%d-%H_%m_%S-devpi_server_datas')
    c.run(f'devpi-export.exe --serverdir D:\\devip_server_datas --include-mirrored-files {dir_path}')
    c.run(fr'"C:\Program Files\WinRAR\Rar.exe" a {dir_path}.zip  {dir_path}')
 
    from ftplib import FTP
    ftp = FTP('xxx')
    ftp.login('xxx', 'xxxxx')
    # ftp.cwd('devip_server_datas')
 
    with open(dir_path + '.zip', 'rb') as f:
        f.seek(0, io.SEEK_END)
        file_size = f.tell()
        f.seek(0, io.SEEK_SET)
        with tqdm(unit='blocks', unit_scale=True, leave=True, miniters=1, desc='Uploading......',
                  total=file_size) as tqdm_instance:
            ftp.storbinary(f'STOR {dir_path}.zip', f, 2048, callback=lambda sent: tqdm_instance.update(len(sent)))
    c.run('net stop devpi')
    c.run('net start devpi')
        # ftp.storbinary(f'STOR {dir_path}.zip', f)
    # print('finished!!')
    # os.unlink(dir_path)

下载需要的包:

:: down.bat
@echo off
set old_dir=%cd%
cd /d "%~dp0"
set PATHON_HOME=%cd%
set PATH=%PATHON_HOME%\;%PATHON_HOME%\Scripts;%PATH%
title Ptython Env:PATHON_HOME=%PATHON_HOME%
 
:download
 
set /p down_pkgs=请输入需要下载的包名,用空格隔开:
inv down -p "%down_pkgs%"
 
goto :download
pause

导出需要镜像的包,并上传镜像包到无网络的环境里

:: up_load.bat
@echo off
set old_dir=%cd%
cd /d "%~dp0"
set PATHON_HOME=%cd%
set PATH=%PATHON_HOME%\;%PATHON_HOME%\Scripts;%PATH%
title Ptython Env:PATHON_HOME=%PATHON_HOME%
REM set /p down_pkgs=请输入需要下载的包名 用空格隔开
inv up
pause

导入镜像

to do...

到此这篇关于python 镜像环境搭建总结的文章就介绍到这了,更多相关python 镜像搭建内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Android应用开发中Action bar编写的入门教程
Feb 26 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
python实现多线程网页下载器
Apr 15 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
python实现一个简单的ping工具方法
Jan 31 Python
python实现对输入的密文加密
Mar 20 Python
Python远程视频监控程序的实例代码
May 05 Python
Python对wav文件的重采样实例
Feb 25 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
python绘制分布折线图的示例
Sep 24 Python
Python实现中英文全文搜索的示例
Dec 04 Python
Python创建SQL数据库流程逐步讲解
Sep 23 #Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 #Python
使用python生成大量数据写入es数据库并查询操作(2)
Sep 23 #Python
Python sklearn分类决策树方法详解
详解Golang如何实现支持随机删除元素的堆
python中validators库的使用方法详解
Sep 23 #Python
Python pyecharts案例超市4年数据可视化分析
Aug 14 #Python
You might like
php zend解密软件绿色版测试可用
2008/04/14 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
Js实现复选框的全选、全不选反选功能代码实例
2020/02/28 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
Python中逗号的三种作用实例分析
2015/06/08 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
Django数据统计功能count()的使用
2020/11/30 Python
selenium如何定位span元素的实现
2021/01/13 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
网站编辑求职信
2013/10/17 职场文书
机电一体化专业推荐信
2013/12/03 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
校庆标语集锦
2014/06/25 职场文书
个人培训总结
2015/03/05 职场文书
2015选调生工作总结
2015/07/24 职场文书
css之clearfix的用法深入理解(必看篇)
2023/05/21 HTML / CSS