¿Cuál es la razón por la cual virtualenv no asocia los archivos .py(w)
con la versión de Virtualenv de los ejecutables de Python? Esto parece una tarea ideal para virtualenv en Windows teniendo en cuenta que no existe un mecanismo como shebang en Windows.¿Por qué Virtualenv en Windows no asocia archivos .py/.pyw/.pyo/.pyc con la versión de virtualenv de los ejecutables de Python?
Respuesta
Las asociaciones de tipo de archivo se manejan en el registro de Windows. El script virtualenv activate tendría que modificar las claves de registro y el script desactivado tendría que restaurar el valor anterior (o arriesgarse a romper las asociaciones).
¿Qué sucede si activa un virtualenv, abre una segunda instancia de cmd.exe y activa un virtualenv diferente? A menos que los desactive en el orden correcto, los valores almacenados para las claves de registro se perderán.
No soy un desarrollador virtualenv, diría que los problemas potenciales superan con creces el pequeño beneficio.
La respuesta más breve es, probablemente, "es complicado y doloroso y nadie quiere esa característica lo suficiente para implementarlo ". – Velociraptors
FWIW, http: //www.python.org/dev/peps/pep-0397/describe el uso de un iniciador python 'virtual' que detectaría la versión apropiada de python. Tal vez tal utilidad podría hacerse para incluir lógica adecuada para virtualenv? – Macke
@Macke esa propuesta no existía cuando se formuló la pregunta, pero ciertamente es posible virtualenv podría modificarse el trabajo con algo así como – Velociraptors
Todo mi desarrollo de Python actualmente está en Linux, pero estoy buscando trabajar en Windows, que es la forma en que encontré esta pregunta. Mi respuesta sería operativa:
en un mensaje, siempre escribo python <scriptName>.py
. Si adoptas este hábito, ¿no ejecutarás Virtualenv el Python adecuado para ti?
Si adopta este hábito, la respuesta es sí, el ejecutable de Python del virtualenv activo se ejecutará ya que es el primer * python.exe * en la variable de entorno * PATH *. –
El lanzador de Python admite comandos personalizados. Crear un archivo py.ini en $ env: LOCALAPPDATA con una sección como esta:
[commands]
venvpython=C:\Path\To\Virtualenv\Scripts\python.exe
Ahora, puede utilizar venvpython en el #! línea del script:
#!venvpython
import sys
print(sys.executable)
virtualenvwrapper-win hace Python archivos asociados con virtualenv actualmente activo:
Tenga en cuenta que la secuencia de comandos por lotes
pyassoc
requiere un símbolo elevado o que UAC está desactivado. Esta secuencia de comandos asocia archivos .py conpython.bat
, un archivo de proceso por lotes simple que llama a la derechapython.exe
en función de si tiene una función virtual activa. Este le permite llamar a los scripts de Python desde la línea de comandos y tener invocado el intérprete de python derecho . Eche un vistazo a la fuente - es increíblemente simple, pero la mejor manera que he encontrado para manejar la asociación condicional de una extensión de archivo.
python.bat
se parece a esto
@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
ACTUALIZACIÓN
Ahora es posible - ver How to associate Python scripts with active virtualenv?
- 1. Python + Django + VirtualEnv + Windows
- 2. Especifique la versión de Python para Virtualenv en Requirements.txt
- 3. Instalación de lxml en virtualenv para windows
- 4. Ejecutando Python desde un virtualenv con Apache/mod_wsgi, en Windows
- 5. Python - Virtualenv, python 3?
- 6. tema django-admin.py y virtualenv en Windows
- 7. Compartiendo entornos virtualenv de Python
- 8. Error de importación con virtualenv
- 9. Python/jython coexistiendo en virtualenv
- 10. virtualenv, python y subversion
- 11. Establecer python virtualenv en vim
- 12. Problema con virtualenv - no se puede activar
- 13. Duplicate virtualenv
- 14. ¿Por qué Virtualenv no crea una carpeta DLL?
- 15. virtualenv en windows 7 vuelve AssertionError
- 16. Virtualenv y control de versión de código fuente
- 17. add2virtualenv (envoltorio virtualenv) no funciona con scipy
- 18. Uso de la biblioteca de imágenes de Python con VirtualEnv en Windows
- 19. Buildout y Virtualenv
- 20. Instalar MySQL-python en virtualenv en Windows 7
- 21. ¿Qué partes de un virtualenv necesitan cambiarse para reubicarlo?
- 22. crear virtualenv mensaje de error
- 23. ¿Cómo instalo una versión anterior de Django en virtualenv?
- 24. Virtualenv sigue cargando paquetes de sitios globales en Windows
- 25. Lua equivalente de virtualenv?
- 26. Virtualenv con Eclipse (Galileo)
- 27. Usando virtualenv con proyectos heredados de Django
- 28. Python - instalar manualmente el paquete usando virtualenv
- 29. Instalar pycairo en virtualenv
- 30. Instalación scrapy/pyOpenSSL en virtualenv Windows
Ver http://www.python.org/dev/peps/pep- 0397/para shebang-propuesta para Windows. – Macke
Muy relacionado: [Asociación temporal de archivos para una única sesión cmd.exe] (http://stackoverflow.com/questions/5583024/) –