Питон ВЭНВ. Можно ли как-нибудь использовать переменные в файле pyvenv.cfg?

У меня есть параметр пути интерпретатора в файле 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?

Насколько мне известно, в файле pyvenv.cfg нельзя использовать переменные.

sinoroc 18.04.2023 19:49

Просто создайте разные виртуальные среды на каждой машине вместо того, чтобы пытаться поделиться ими на удаленном диске.

chepner 18.04.2023 19:50
activate.bat похож на любой командный файл. вы можете отредактировать файл и добавить любую команду, которую хотите, написать скрипт Python, который генерирует pyvenv.cfg из строки шаблона, вызвать этот скрипт в activate.bat
rioV8 18.04.2023 20:56

если я создаю разные виртуальные среды на каждой машине, то мне нужно вручную обновлять файлы в каждой из этих сред каждый раз, когда я в ней работаю, но я хочу просто добраться до своего офиса, включить компьютер и работать с файлами, которые я не делал. заканчивай дома :)

Stanislav 18.04.2023 22:26

Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете. Пожалуйста, смотрите как спросить . минимальный воспроизводимый пример

JialeDu 19.04.2023 08:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

да, единственный способ сделать это — создать новый файл 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 и любым именем пользователя.

Другие вопросы по теме