Почему 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)