Как сделать виртуальные среды pip по-настоящему портативными?Python

Программы на Python
Ответить
Anonymous
 Как сделать виртуальные среды pip по-настоящему портативными?

Сообщение Anonymous »

Я пытаюсь установить Open WebUI как переносимую установку, в которой базовую папку можно переместить или переименовать. Однако я столкнулся с проблемами, которые делают виртуальную среду действительно переносимой.
При установке я пробовал использовать динамические пути, но каким-то образом пути жестко запрограммированы во время установки. процесс установки. При попытке активировать виртуальную среду в другом месте получаю сообщение об ошибке:
Fatal error in launcher: Unable to create process using '"...original\path\venv\Scripts\python.exe" "...new\path\venv\Scripts\open-webui.exe" serve': The system cannot find the file specified.

Как мне решить эту проблему и сделать виртуальные среды pip по-настоящему переносимыми?
В этом примере я использование двух пакетных файлов для установки Open WebUI.
setup.bat
@echo on
REM setup.bat - Run this first to create the Open-WebUI_portable environment
set BASE_DIR=%~dp0
set VENV_DIR=%BASE_DIR%venv
set PYTHON_DIR=%BASE_DIR%python
set PIP_DIR=%BASE_DIR%pip-cache
set APPDATA=%BASE_DIR%appdata
set USERPROFILE=%BASE_DIR%userprofile
set HOME=%BASE_DIR%home
set XDG_CACHE_HOME=%BASE_DIR%cache
set PYTHONUSERBASE=%BASE_DIR%pythonuser

echo Creating directories...
mkdir "%PIP_DIR%" 2>nul
mkdir "%APPDATA%" 2>nul
mkdir "%USERPROFILE%" 2>nul
mkdir "%HOME%" 2>nul
mkdir "%XDG_CACHE_HOME%" 2>nul
mkdir "%PYTHONUSERBASE%" 2>nul

:DOWNLOAD_PYTHON
echo Downloading Python...
curl -L "https://www.python.org/ftp/python/3.11. ... -amd64.zip" -o "%BASE_DIR%python.zip"
if not exist "%BASE_DIR%python.zip" (
echo ERROR: Failed to download Python
echo Would you like to retry? (Y/N^)
choice /c yn /n
if errorlevel 2 (
echo Installation cancelled
exit /b 1
)
goto DOWNLOAD_PYTHON
)

echo Extracting Python...
powershell -Command "Expand-Archive -Path '%BASE_DIR%python.zip' -DestinationPath '%PYTHON_DIR%' -Force"
if not exist "%PYTHON_DIR%\python.exe" (
echo ERROR: Failed to extract Python
pause
exit /b 1
)

echo Configuring Python for pip...
del "%PYTHON_DIR%\python311._pth" 2>nul
(
echo python311.zip
echo .
echo %PYTHON_DIR%\Lib\site-packages
echo .
echo import site
) > "%PYTHON_DIR%\python311._pth"

:DOWNLOAD_GETPIP
echo Downloading get-pip.py...
curl -L "https://bootstrap.pypa.io/get-pip.py" -o "%BASE_DIR%get-pip.py"
if not exist "%BASE_DIR%get-pip.py" (
echo ERROR: Failed to download get-pip.py
echo You can try to download it manually from https://bootstrap.pypa.io/get-pip.py
echo and place it in %BASE_DIR%get-pip.py
echo.
echo Would you like to retry the download? (Y/N^)
choice /c yn /n
if errorlevel 2 (
echo Installation cancelled
exit /b 1
)
goto DOWNLOAD_GETPIP
)

echo Installing pip...
"%PYTHON_DIR%\python.exe" "%BASE_DIR%get-pip.py" --no-warn-script-location
if errorlevel 1 (
echo ERROR: Failed to install pip
echo This is a critical error. Please ensure:
echo 1. You have internet connection
echo 2. Any antivirus is not blocking the installation
echo 3. You are running this script as administrator
pause
exit /b 1
)

echo Installing virtualenv...
"%PYTHON_DIR%\Scripts\pip.exe" install virtualenv
if errorlevel 1 (
echo ERROR: Failed to install virtualenv
echo This is a critical error. Please check your internet connection
pause
exit /b 1
)

echo Creating virtual environment...
"%PYTHON_DIR%\Scripts\virtualenv.exe" "%VENV_DIR%"
if not exist "%VENV_DIR%\Scripts\activate.bat" (
echo ERROR: Failed to create virtual environment
pause
exit /b 1
)

echo Installing Open WebUI...
call "%VENV_DIR%\Scripts\activate.bat"
"%VENV_DIR%\Scripts\pip.exe" install --cache-dir="%PIP_DIR%" open-webui
if errorlevel 1 (
echo ERROR: Failed to install Open WebUI
pause
exit /b 1
)

echo Creating postactivate script for relocatable paths...
mkdir "%VENV_DIR%\Scripts\postactivate.d" 2>nul
(
echo @echo on
echo set BASE_DIR=%%~dp0
echo set APPDATA=%%BASE_DIR%%appdata
echo set LOCALAPPDATA=%%BASE_DIR%%localappdata
echo set USERPROFILE=%%BASE_DIR%%userprofile
echo set HOME=%%BASE_DIR%%home
echo set XDG_CACHE_HOME=%%BASE_DIR%%cache
echo set XDG_CONFIG_HOME=%%BASE_DIR%%config
echo set PYTHONUSERBASE=%%BASE_DIR%%pythonuser
echo set PIP_CACHE_DIR=%%BASE_DIR%%pip-cache
echo set TEMP=%%BASE_DIR%%temp
echo set TMP=%%BASE_DIR%%temp
) > "%VENV_DIR%\Scripts\postactivate.d\relocatable.bat"

echo Cleaning up...
del "%BASE_DIR%python.zip"
del "%BASE_DIR%get-pip.py"

echo Setup complete! Use run.bat to start Open WebUI
pause

и run.bat
@echo on
set BASE_DIR=%~dp0
set VENV_DIR=%BASE_DIR%venv

REM Set all environment variables to keep files in Open-WebUI_portable directory
set APPDATA=%BASE_DIR%appdata
set LOCALAPPDATA=%BASE_DIR%localappdata
set USERPROFILE=%BASE_DIR%userprofile
set HOME=%BASE_DIR%home
set XDG_CACHE_HOME=%BASE_DIR%cache
set XDG_CONFIG_HOME=%BASE_DIR%config
set PYTHONUSERBASE=%BASE_DIR%pythonuser
set PIP_CACHE_DIR=%BASE_DIR%pip-cache
set TEMP=%BASE_DIR%temp
set TMP=%BASE_DIR%temp

REM Create necessary directories
mkdir "%APPDATA%" 2>nul
mkdir "%LOCALAPPDATA%" 2>nul
mkdir "%USERPROFILE%" 2>nul
mkdir "%HOME%" 2>nul
mkdir "%XDG_CACHE_HOME%" 2>nul
mkdir "%XDG_CONFIG_HOME%" 2>nul
mkdir "%PYTHONUSERBASE%" 2>nul
mkdir "%TEMP%" 2>nul

REM Activate virtual environment
call "%VENV_DIR%\Scripts\activate.bat"

REM Run postactivate script for relocatable paths
call "%VENV_DIR%\Scripts\postactivate.d\relocatable.bat"

REM Run Open WebUI
"%VENV_DIR%\Scripts\open-webui.exe" serve

REM Open browser to localhost:8080
start "" http://localhost:8080

pause

Изначально он работает нормально, но когда я переименовываю или перемещаю базовую папку, он перестает работать.
Ошибка:
F:\OpenWebUI-portable-NEW>call "F:\OpenWebUI-portable-NEW\venv\Scripts\activate.bat"
Fatal error in launcher: Unable to create process using '"F:\OpenWebUI-portable-OLD\venv\Scripts\python.exe" "F:\OpenWebUI-portable-NEW\venv\Scripts\open-webui.exe" serve': The system cannot find the file specified.


Подробнее здесь: https://stackoverflow.com/questions/793 ... y-portable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»