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代码调试的几种方法总结
Apr 15 Python
Python中title()方法的使用简介
May 20 Python
利用python批量检查网站的可用性
Sep 09 Python
python Opencv将图片转为字符画
Feb 19 Python
Python对多属性的重复数据去重实例
Apr 18 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
Jun 09 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
Python 实现try重新执行
Dec 21 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
js实现经典贪吃蛇小游戏
2020/03/19 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
python查找第k小元素代码分享
2013/12/18 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
python中的字符串内部换行方法
2018/07/19 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
建筑系毕业生自我鉴定
2014/01/24 职场文书
面试后的英文感谢信
2014/02/01 职场文书
会计人员岗位职责
2014/03/19 职场文书
小学六一主持词开场白
2015/05/28 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书
PHP命令行与定时任务
2021/04/01 PHP
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis