Основной функционал: * Портативная среда выполнения на виндовс * Пересылка сообщений из публичного канала по ключевым словам * Отслеживание изменений пересланных сообщений * Очистка от системных
221 lines
8.1 KiB
Batchfile
221 lines
8.1 KiB
Batchfile
@echo off
|
|
chcp 65001 >nul
|
|
cd /d "%~dp0%"
|
|
setlocal enabledelayedexpansion
|
|
|
|
REM Установка переменных
|
|
set home_dir=%~dp0%
|
|
set python_dir=python312
|
|
set python_url=https://www.python.org/ftp/python/3.12.10/python-3.12.10-embed-amd64.zip
|
|
|
|
:start
|
|
REM Проверяем, установлен ли уже 7za.exe
|
|
if exist "%python_dir%\7za.exe" (move /y %python_dir%\7za.exe 7za.exe) >nul
|
|
if exist 7za.exe (
|
|
echo [ ] 7zip уже скачан: Использую локальную версию
|
|
) else (
|
|
echo [*] Скачивание 7zip
|
|
certutil.exe -urlcache -split -f "https://www.7-zip.org/a/7zr.exe" 7zr.exe >nul
|
|
certutil.exe -urlcache -split -f "https://www.7-zip.org/a/7z2500-extra.7z" 7z2500-extra.7z >nul
|
|
7zr.exe x 7z2500-extra.7z 7za.exe -y >nul
|
|
del 7zr.exe
|
|
del 7z2500-extra.7z
|
|
)
|
|
|
|
if exist "%python_dir%/python.exe" (
|
|
for /f "tokens=2" %%V in ('cmd /c ^""%python_dir%\python.exe" --version^"') do set "python_version=%%V"
|
|
echo [ ] Python уже скачан: Использую локальную версию !python_version!
|
|
) else (
|
|
echo [*] Скачивание Python
|
|
certutil.exe -urlcache -split -f "https://www.python.org/ftp/python/3.12.10/python-3.12.10-embed-amd64.zip" python.zip >nul
|
|
7za.exe x python.zip -o"%python_dir%" >nul
|
|
for /f "tokens=2" %%V in ('cmd /c ^""%python_dir%\python.exe" --version^"') do set "python_version=%%V"
|
|
for /f "tokens=1,2 delims=." %%a in ("!python_version!") do set "python_short_version=python%%a%%b"
|
|
echo [*] Скачан Python !python_version!
|
|
del python.zip
|
|
|
|
echo [*] Установка pip
|
|
cd "%python_dir%"
|
|
certutil.exe -urlcache -split -f "https://bootstrap.pypa.io/get-pip.py" get-pip.py >nul
|
|
python.exe get-pip.py --no-warn-script-location
|
|
del get-pip.py
|
|
echo [*] Изменение !python_short_version!._pth
|
|
echo Lib>> !python_short_version!._pth
|
|
echo Lib\site-packages>> !python_short_version!._pth
|
|
echo import site>> !python_short_version!._pth
|
|
python.exe -m pip install --upgrade pip setuptools wheel --no-cache-dir --no-warn-script-location
|
|
cd ..
|
|
if exist "requirements.txt" (
|
|
%python_dir%\python.exe -m pip install -r requirements.txt --no-cache-dir --no-warn-script-location
|
|
)
|
|
)
|
|
|
|
:venv_setup
|
|
set update=False
|
|
set no_changes=False
|
|
if exist "%python_dir%\Scripts\activate.bat" (
|
|
if exist "%python_dir%\pyvenv.cfg" (
|
|
echo [ ] Виртуальное окружение уже сконфигурировано\
|
|
|
|
for /f "tokens=2 delims==" %%H in ('findstr /r "^base-executable[ ]*=" "%python_dir%\pyvenv.cfg"') do (set "installed_home=%%H")
|
|
rem Удаляем пробелы и кавычки по краям
|
|
for /f "tokens=* delims= " %%B in ("!installed_home!") do (set "installed_home=%%B")
|
|
set "installed_home=!installed_home:"=!"
|
|
rem Выводим для отладки
|
|
echo Текущий путь в pyvenv.cfg: !installed_home!
|
|
echo Ожидаемый путь: %home_dir%%python_dir%\python.exe
|
|
|
|
rem Сравниваем пути
|
|
if /i "!installed_home!"=="%home_dir%%python_dir%\python.exe" (
|
|
echo Конфигурация верная. Обновление не требуется
|
|
set no_changes=True
|
|
goto skip_venv
|
|
) else (
|
|
echo Путь портативной устаноки изменился.
|
|
set /p "update=Требуется обновление. Обновить? [Y/Д] нет по умолчанию: "
|
|
if /i "!update!"=="Y" (
|
|
set update=True
|
|
echo Обновляем...
|
|
) else (
|
|
if /i "!update!"=="Д" (
|
|
set update=True
|
|
echo Обновляем...
|
|
goto venv_config
|
|
)
|
|
echo Пропускаем обновление.
|
|
goto skip_venv
|
|
)
|
|
)
|
|
))
|
|
|
|
:venv_config
|
|
echo [*] Конфигурация виртуального окружения
|
|
|
|
if exist %python_dir%\Lib\site-packages\sitecustomize.py (
|
|
echo [ ] Lib\site-packages\sitecustomize.py существует и не требует обновления
|
|
goto skip_sitecustomize
|
|
) else (
|
|
echo [*] Создание sitecustomize.py для исправления site.getsitepackages и sys.prefix
|
|
)
|
|
(
|
|
echo import site
|
|
echo import os
|
|
echo import sys
|
|
echo project_root = os.path.abspath^(os.path.join^(os.getenv^('VIRTUAL_ENV'^), '..'^)^)
|
|
echo if project_root in sys.path:
|
|
echo sys.path.remove^(project_root^)
|
|
echo sys.prefix = os.getenv^('VIRTUAL_ENV'^)
|
|
echo sys.exec_prefix = os.getenv^('VIRTUAL_ENV'^)
|
|
echo def getsitepackages^(^):
|
|
echo return [os.path.join^(os.getenv^('VIRTUAL_ENV'^), 'Lib', 'site-packages'^)]
|
|
echo site.getsitepackages = getsitepackages
|
|
) > "%python_dir%\Lib\site-packages\sitecustomize.py"
|
|
:skip_sitecustomize
|
|
|
|
echo [*] Создание %python_dir%\pyvenv.cfg
|
|
(
|
|
echo home = %home_dir%%python_dir%
|
|
echo implementation = CPython
|
|
echo version_info = %python_version%
|
|
echo virtualenv = 20.31.2
|
|
echo include-system-site-packages = false
|
|
echo base-prefix = %home_dir%%python_dir%
|
|
echo base-exec-prefix = %home_dir%%python_dir%
|
|
echo base-executable = %home_dir%%python_dir%\python.exe
|
|
) > "%python_dir%\pyvenv.cfg"
|
|
|
|
echo [*] Создание %python_dir%\Scripts\activate.bat
|
|
(
|
|
echo @echo off
|
|
echo REM This file is UTF-8 encoded, so we need to update the current code page while executing it
|
|
echo chcp 65001 ^> nul
|
|
echo set "VIRTUAL_ENV=%home_dir%%python_dir%"
|
|
echo set "VIRTUAL_ENV_PROMPT=%python_dir%"
|
|
echo if defined _OLD_VIRTUAL_PROMPT ^(
|
|
echo set "PROMPT=%%_OLD_VIRTUAL_PROMPT%%"
|
|
echo ^) else ^(
|
|
echo if not defined PROMPT ^(
|
|
echo set "PROMPT=$P$G"
|
|
echo ^)
|
|
echo if not defined VIRTUAL_ENV_DISABLE_PROMPT ^(
|
|
echo set "_OLD_VIRTUAL_PROMPT=%%PROMPT%%"
|
|
echo ^)
|
|
echo ^)
|
|
echo if not defined VIRTUAL_ENV_DISABLE_PROMPT ^(
|
|
echo set "PROMPT=(%%VIRTUAL_ENV_PROMPT%%) %%PROMPT%%"
|
|
echo ^)
|
|
echo if defined _OLD_VIRTUAL_PYTHONHOME ^(
|
|
echo set "PYTHONHOME=%%_OLD_VIRTUAL_PYTHONHOME%%"
|
|
echo ^) else ^(
|
|
echo set "_OLD_VIRTUAL_PYTHONHOME=%%PYTHONHOME%%"
|
|
echo ^)
|
|
echo set "PYTHONHOME="
|
|
echo if defined _OLD_VIRTUAL_PATH ^(
|
|
echo set "PATH=%%_OLD_VIRTUAL_PATH%%"
|
|
echo ^) else ^(
|
|
echo set "_OLD_VIRTUAL_PATH=%%PATH%%"
|
|
echo ^)
|
|
echo set "PATH=%%VIRTUAL_ENV%%;%%VIRTUAL_ENV%%\Scripts;%%PATH%%"
|
|
echo set "PYTHONPATH=%%VIRTUAL_ENV%%\Lib\site-packages"
|
|
echo chcp %%_OLD_CODEPAGE%% ^> nul
|
|
) > %python_dir%\Scripts\activate.bat
|
|
:skip_venv
|
|
|
|
call %python_dir%\Scripts\activate.bat
|
|
|
|
if exist run_me.bat (
|
|
echo [ ] run_me.bat существует, не требует обновления
|
|
goto skip_run_me
|
|
)
|
|
echo [+] Создание run_me.bat
|
|
(
|
|
echo cd /d "%%~dp0%%"
|
|
echo call %python_dir%\Scripts\activate.bat
|
|
echo call python main.py
|
|
echo pause
|
|
) > run_me.bat
|
|
:skip_run_me
|
|
|
|
REM Храним 7zip внутри папки Python
|
|
if exist 7za.exe (move /y 7za.exe %python_dir%\7za.exe )>nul
|
|
|
|
if %no_changes%==True (
|
|
set /p "reinstall=Изменений не внесено. Желаете переустановить? [Y/Д] нет по умолчанию: "
|
|
if /i "!reinstall!"=="Y" (
|
|
goto clear_installation
|
|
) else (
|
|
if /i "!reinstall!"=="Д" (goto clear_installation)
|
|
)
|
|
goto end
|
|
) else (
|
|
echo [✔️] Установка завершена
|
|
pause
|
|
goto end
|
|
)
|
|
:clear_installation
|
|
set /p "reinstall_python=Скачать Python и пакеты заново? [Y/Д] нет по умолчанию: "
|
|
if /i "!reinstall_python!"=="Y" (
|
|
goto del_all_python
|
|
) else (
|
|
if /i "!reinstall_python!"=="Д" (goto del_all_python)
|
|
)
|
|
goto del_only_settings
|
|
|
|
:del_all_python
|
|
if exist "%python_dir%\7za.exe" (move /y %python_dir%\7za.exe 7za.exe) >nul
|
|
move /y %python_dir%\7za.exe 7za.exe>nul
|
|
echo [-] Удаление Python
|
|
rmdir /s /q %python_dir%
|
|
goto start
|
|
|
|
:del_only_settings
|
|
echo [-] Удаление настроек окружения
|
|
del "%python_dir%\Lib\site-packages\sitecustomize.py"
|
|
del "%python_dir%\pyvenv.cfg"
|
|
del "%python_dir%\Scripts\activate.bat"
|
|
del run_me.bat
|
|
goto venv_setup
|
|
|
|
|
|
:end
|