Почему virtualenv не ассоциируется с Windows.py/.pyw/.pyo/.pyc-файлы с версией исполняемых файлов Python virtualenv?

в чем причина, по которой virtualenv не связывает .py(w) файлы с версией исполняемых файлов Python virtualenv? Это кажется идеальной задачей для virtualenv в Windows, учитывая, что нет такого механизма, как shebang на Windows.

4 ответов


ассоциации типов файлов обрабатываются в реестре Windows. Сценарий активации virtualenv должен будет изменить разделы реестра, а сценарий деактивации должен будет восстановить предыдущее значение (или риск нарушения ассоциаций).

Что произойдет, если вы активируете virtualenv, откройте второй экземпляр cmd.exe, и активировать другой virtualenv? Если вы не отключите их в правильном порядке, сохраненные значения будут потеряны.

Я не разработчик virtualenv, я бы сказал, что потенциальные проблемы намного перевешивают небольшую выгоду.


virtualenvwrapper-win связывает ли файлы Python с текущим активным virtualenv:

обратите внимание, что пакетный скрипт pyassoc требуется командная строка с повышенными правами или отключен UAC. Этот сценарий ассоциируется .py файлы с python.bat простой пакетный файл, который вызывает право python.exe на основе того, есть ли у вас активный virtualenv. Этот позволяет вызывать скрипты python из командной строки и иметь вызывается правый интерпретатор python. Посмотрите на источник-это невероятно простой, но лучший способ, который я нашел, чтобы справиться с условным ассоциация расширения файла.

python.bat выглядит так

@echo off

if defined PYTHONHOME (
    goto MAIN
)
FOR /F "tokens=*" %%i in ('whereis.bat python.exe') do set PYTHONHOME=%%~dpi
SET PYTHONHOME=%PYTHONHOME:~0,-1%

:MAIN
SETLOCAL EnableDelayedExpansion
if defined VIRTUAL_ENV (
    set PY="%VIRTUAL_ENV%\Scripts\python.exe"
) else (
    set PY="%PYTHONHOME%\python.exe"
)
ENDLOCAL & %PY% %*

:END

обновление

теперь это возможно – см. как связать скрипты Python с активным virtualenv?


вся моя разработка Python в настоящее время находится на Linux, но я смотрю на работу над Windows, и именно так я нашел этот вопрос. Мой ответ был бы оперативным:--3-->

вместо ввода <scriptName>.py в командной строке, я всегда типа python <scriptName>.py. Если вы примете эту привычку, virtualenv не выполнит для вас правильный Python?


Python launcher поддерживает пользовательские команды. Создайте пы.ini-файл в $env: LOCALAPPDATA с таким разделом:

[commands]
venvpython=C:\Path\To\Virtualenv\Scripts\python.exe

теперь вы можете использовать venvpython в #! строка вашего скрипта:

#!venvpython
import sys
print(sys.executable)