Почему virtualenv в Windows не связывает файлы .py / .pyw / .pyo / .pyc с исполняемыми файлами virtualenv Python? - PullRequest
7 голосов
/ 02 февраля 2011

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

Ответы [ 4 ]

4 голосов
/ 03 февраля 2011

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

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

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

2 голосов
/ 28 октября 2012

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

UPDATE

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

1 голос
/ 04 октября 2012

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

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

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

#!venvpython
import sys
print(sys.executable)
1 голос
/ 15 февраля 2011

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

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

...