У меня есть параметр пути интерпретатора в файле pyvenv.cfg:
executable = C:\Users\Stanislav\AppData\Local\Programs\Python\Python311\python.exe
Можно ли каким-либо образом использовать переменную типа %USERPROFILE% или аналогичную для динамического изменения текущей пользовательской папки, в которой установлен интерпретатор python?
executable = %USERPROFILE%\AppData\Local ...........
Но я хочу сделать это без необходимости создания нового файла pyvenv.cfg на лету при запуске activ.bat
Причина этого в том, что файлы моего проекта находятся в облаке Onedrive, и я работаю над ними с разных машин, которые имеют разные имена пользователей (Станислав-работа, Станислав-дом и т. д.), поэтому, когда я активирую текущую среду, я получаю сообщение о том, что python не установлен, и мне нужно вручную отредактировать путь в этом файле, чтобы он заработал
Может быть, я мог бы проанализировать эти переменные с помощью файла, который использует этот pyvenv.cfg?
Просто создайте разные виртуальные среды на каждой машине вместо того, чтобы пытаться поделиться ими на удаленном диске.
activate.bat
похож на любой командный файл. вы можете отредактировать файл и добавить любую команду, которую хотите, написать скрипт Python, который генерирует pyvenv.cfg
из строки шаблона, вызвать этот скрипт в activate.bat
если я создаю разные виртуальные среды на каждой машине, то мне нужно вручную обновлять файлы в каждой из этих сред каждый раз, когда я в ней работаю, но я хочу просто добраться до своего офиса, включить компьютер и работать с файлами, которые я не делал. заканчивай дома :)
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете. Пожалуйста, смотрите как спросить . минимальный воспроизводимый пример
да, единственный способ сделать это — создать новый файл pyvenv.cfg «на лету». каждый раз, когда виртуальная среда активируется:
$PROJECT_DIR = Split-Path (Split-Path (Split-Path -Path $MyInvocation.MyCommand.Path -Parent) -Parent) -Parent
$pythonVersion = (Get-Content $PROJECT_DIR\.venv\pyvenv.cfg | Select-String 'version = ').ToString().Split('=')[1].Trim()
$pythonVersion = $pythonVersion.Replace('"', '')
$pythonFolder = 'python' + $pythonVersion.Split('.')[0] + $pythonVersion.Split('.')[1]
$pyvenvContent = @"
home = C:\Users\$env:USERNAME\AppData\Local\Programs\Python\$pythonFolder
include-system-site-packages = false
version = $pythonVersion
executable = C:\Users\$env:USERNAME\AppData\Local\Programs\Python\$pythonFolder\python.exe
"@
New-Item -ItemType Directory -Path "$PROJECT_DIR\.venv" -Force
$pyvenvContent | Out-File -FilePath "$PROJECT_DIR\.venv\pyvenv.cfg" -Encoding utf8
$env:PATH = "$PROJECT_DIR\.venv\Scripts;$env:PATH"
Set-Location $PROJECT_DIR
Просто нужно добавить это в конец файла Activate.ps1. Он получает текущий путь к папке проекта (на 2 уровня вверх от местоположения файла activ.ps1) в переменную $PROJECT_DIR, которая затем используется в качестве местоположения по умолчанию в powershell или терминале при активации venv (поэтому вам не нужно запускать 'cd /current_project_location') Он получает версию Python из предыдущего файла pyvenv.cfg и форматирует его, чтобы получить правильное имя каталога (от 3.10.11 до python310), поэтому я могу использовать его с каждой версией Python и любым именем пользователя.
Насколько мне известно, в файле
pyvenv.cfg
нельзя использовать переменные.