2009-09-01 32 views
17

Hola compañeros pythonistas, parece que hay un problema cuando se usa virtualenv en PowerShell.virtualenv en PowerShell?

Cuando intento activar mi entorno de PowerShell como ..

> env/scripts/activar

.. no pasa nada. (el intérprete de comandos del intérprete de comandos debería haber cambiado, así como también la variable de entorno PATH).

Supongo que el problema es que PowerShell genera un nuevo cmd. proceso solo para ejecutar el archivo activate.bat, por lo tanto, renderizando los cambios que active.bat hace al shell muerto después de que se complete.

¿Tiene alguna solución al problema? (Me estoy quedando con cmd.exe por el momento)

Respuesta

9

Here es una publicación que contiene un script de Powershell que le permite ejecutar archivos de proceso por lotes que modifican constantemente sus variables de entorno. La secuencia de comandos propaga los cambios de cualquier variable de entorno al entorno de PowerShell llamante.

+0

Gracias Vinay, explica claramente el problema. –

+0

Esto funciona, pero no se puede agregar el argumento de solicitud. Tendría que haber un activate.ps1 que pudiera llamar a Write-Host antes de que se establezca el prompt. –

+2

Esta respuesta ya no es válida, ya que virtualenv admite PowerShell de fábrica, como se indica en http://stackoverflow.com/questions/1365081/virtualenv-in-powershell/10030999#10030999 –

10

Una solución rápida sería invocar cmd y luego ejecutar su activate.bat desde dentro de la sesión de cmd. Por ejemplo:

PS C:\my_cool_env\Scripts> cmd 
Microsoft Windows [Version 6.1.7600] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 

C:\my_cool_env\Scripts>activate.bat 
(my_cool_env) C:\my_cool_env\Scripts> 
+0

Esto funcionó para mí.Mucho más fácil. ¡Gracias! – irene

45

The latest version of virtualenv apoya PowerShell fuera-de-la-box.

Sólo asegúrese de ejecutar:

Scripts\activate.ps1 

en lugar de

Scripts\activate 

Este último se ejecutará activate.bat, lo que no funciona en PowerShell.

+17

Es posible que deba ejecutar 'set-executionpolicy RemoteSigned' para permitir la ejecución de scripts (el mío se estableció en' Restricted' antes) [docs] (http://technet.microsoft.com/en-us/library/ee176961.aspx) –

+0

y simplemente escriba 'deactivate' para deshacer –

+0

¿Hay alguna manera de cambiar el color del mensaje usando este enfoque? –

1

probar esto: . .\env\Scripts\activate.ps1 puntos de vigilancia y espacios

+1

. \ [My-venv] \ Scripts \ activate.ps1 funcionó para mí. –

2

Este error ocurre debido a una medida de seguridad que no permite que los scripts se ejecuten en su sistema sin que tenga aprobó. Puede hacerlo mediante la apertura de una PowerShell con derechos administrativos (búsqueda de PowerShell en el menú principal y seleccionar Ejecutar como administrador en el menú contextual) y escriba:

puesta a executionpolicy RemoteSigned

para más: http://www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/

0

Escribí este pequeño script rápido para manejar mi activación y puesta en marcha de un servidor de desarrollo.

$ep = Get-ExecutionPolicy 

if ($ep -eq 'RemoteSigned') { 

    $root = "C:\Users\ALeven\OneDrive\!code_projects\!django_projects\" 

    $test = Read-Host -Prompt 'Would you like to activate the python environment? y/n' 
    if ($test -eq 'y') { 

     $activatestr = ($root + "\work_venv\Scripts\Activate.ps1") 
     & $activatestr 

    } 

    $test = Read-Host -Prompt 'Would you like to run the python server? y/n' 

    if ($test -eq 'y') { 

     $whichserver = Read-Host -Prompt 'Enter the name of the project.' 
     $path = ($root + $whichserver) 
     $runserverstr = ($path + "\manage.py") 
     python.exe $runserverstr runserver 

    } 

} else { 

    Write-host "Execution Policy does not allow this script to run properly" 
    Write-host "If you have the proper permissions," 
    Write-Host "Please close powershell," 
    Write-host "then right click the powershell icon and run as administrator" 
    Write-host "Once in the powershell environment, execute the following:" 
    Write-host "Set-ExecutionPolicy RemoteSigned -Force" 

} 

Enjoy.