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 相关文章推荐
python 实现文件的递归拷贝实现代码
Aug 02 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
详解Python中where()函数的用法
Mar 27 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
详解Python3的TFTP文件传输
Jun 26 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
Python实现简单猜数字游戏
Feb 03 Python
Python中对象的比较操作==和is区别详析
Feb 12 Python
python APScheduler执行定时任务介绍
Apr 19 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
Window下PHP三种运行方式图文详解
2013/06/11 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
js登录弹出层特效
2014/03/07 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
JSON字符串转JSON对象
2015/07/31 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
python能做什么 python的含义
2019/10/12 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
银行实习生的自我评价
2013/12/09 职场文书
大学同学聚会邀请函
2014/01/19 职场文书
房屋转让协议书
2014/10/18 职场文书
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL