console windows - set environnement pour python

console windows - set environnement pour python - Win 7 - Windows & Software

Marsh Posté le 02-09-2019 à 13:29:25    

Bonjour,
 
 
Je me retrouve un peu con face à un problème normalement simple. Je précise que je suis essentiellement utilisateur linux en mode console, donc je ne connais pas bien celle de windows.
 
Je dois travailler avec un environnement python sous windows , et je voudrais créer un batch qui me démarre automatiquement une console ( avec un prompt ) préalablement initialisé avec un script virtualenv python.
 
En gros, avec python, lorsque je crée un virtualenv, il me crée un activate.bat dans lequel il met en place un environnement isolé sous forme de variable d'environnement. Or, si je lance le activate.bat, cela m'ouvre une console, exécute l'ensemble du script puis cela quitte la console.
 
Si par contre j'ouvre une console avec cmd, et que je drag&drop le activate.bat dans la console, cela m'exécute bien le script, et je récupère la main avec l'environnement initialisé.
 
Ma question est simple : comment faire ça en faisant un raccourci sur le bureau  :pt1cable:  
 
Par exemple, si je crée un .bat contenant cela :


d:
cd d:/path/to/env/
./activate.bat


 
et que je double clique dessus, comment faire pour que ça m'ouvre la console, que ça aille dans le bon path,puisque ça me sette l'environnement, et enfin ça me rend la main pour que je puisse ensuite taper des commandes sur le prompt ? C'est cette dernière étape qui ne se fait pas, la fenêtre se ferme avant.
 
Merci d'avance  :jap:  
 
( je sens que je vais me trouver con en lisant la réponse ).

Reply

Marsh Posté le 02-09-2019 à 13:29:25   

Reply

Marsh Posté le 02-09-2019 à 16:56:28    

Code :
  1. echo "prout"
  2. cmd /k

Reply

Marsh Posté le 03-09-2019 à 08:47:59    

Merci :)
 
Ca marche quasiment, mais quand j'appelle le script généré par python pour activer le virtualenv, ca se quitte quand même.
 
Le script contient ceci :  
 


@echo off
 
set "VIRTUAL_ENV=C:\Users\frederic.mazur\Envs\env_37"
 
if defined _OLD_VIRTUAL_PROMPT (
    set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
) else (
    if not defined PROMPT (
        set "PROMPT=$P$G"
    )
    if not defined VIRTUAL_ENV_DISABLE_PROMPT (
        set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
    )
)
if not defined VIRTUAL_ENV_DISABLE_PROMPT (
    set "PROMPT=(env_37) %PROMPT%"
)
 
REM Don't use () to avoid problems with them in %PATH%
if defined _OLD_VIRTUAL_PYTHONHOME goto ENDIFVHOME
    set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%"
:ENDIFVHOME
 
set PYTHONHOME=
 
REM if defined _OLD_VIRTUAL_PATH (
if not defined _OLD_VIRTUAL_PATH goto ENDIFVPATH1
    set "PATH=%_OLD_VIRTUAL_PATH%"
:ENDIFVPATH1
REM ) else (
if defined _OLD_VIRTUAL_PATH goto ENDIFVPATH2
    set "_OLD_VIRTUAL_PATH=%PATH%"
:ENDIFVPATH2
 
set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%"
:: In case user makes changes to PYTHONPATH
if defined _OLD_VIRTUAL_PYTHONPATH (
    set "PYTHONPATH=%_OLD_VIRTUAL_PYTHONPATH%"
) else (
    set "_OLD_VIRTUAL_PYTHONPATH=%PYTHONPATH%"
)


 
Si je mets le cmd /k à la fin, cela fonctionne, mais cela veut dire que je modifie le script généré par python/virtualenv, je ne suis pas sûr que ce soit la meilleure chose.
 
J'aurais voulu faire un truc du genre :
 
1) le script ci-dessus se trouve dans le fichier activate.bat
2) je crée un fichier start.bat contenant les choses suivantes
 


d:
cd d:/path/to/directory
"c:/users/me/envs/env_37/scripts/activate.bat"
cmd /k


 
sauf que ca ne marche pas car à l'appel de la 3eme ligne la fenetre quitte sans même passer par le cmd /k

Reply

Marsh Posté le 03-09-2019 à 08:49:37    

ok, il suffit de mettre "call" devant "c:\users...".  
 
Merci de ton aide  :jap:

Reply

Marsh Posté le 03-09-2019 à 12:12:05    

d:
cd d:\path\to\directory
"c:\users\me\envs\env_37\scripts\activate.bat"
cmd /k


Juste pour info : sous Windows, le séparateur de chemin est l’antislash « \ », pas le slash normal. Certes, Windows (et DOS avant lui) sont heureusement capables de convertir ça comme il faut, mais faut quand même évite de les confondre : le slash est avant tout un caractère utilisé pour préciser un paramètre : « /t », « /activate »…


Message édité par Trit' le 03-09-2019 à 12:12:55
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed