Quels sont les pièges et les solutions de contournement lors de l’utilisation d’environnements virtuels Python sous Windows?

brève description
La question n’est pas destinée à demander si l’utilisation d’environnements virtuels est nécessaire, mais lorsque vous utilisez virtualenv de Ian Bicking, quelle est la meilleure façon de gérer les environnements sous Windows. Si vous avez plusieurs idées, veuillez répondre à plusieurs resockets afin que les meilleures réponses puissent être votées. Merci!

Contexte
Lors du développement en Python, j’essaie généralement d’utiliser autant que possible Mac OSX / Bash. Cependant, il y a toujours des projets que je suis obligé d’utiliser sur Windows pour le support matériel / pilote. Pour ces projets, j’ai tendance à utiliser la méthode du «double clic» pour exécuter les modules avec le fichier python.exe enregistré. L’utilisation du ‘double clic’ est un moyen si simple d’exécuter plusieurs threads / tests en même temps, sans avoir à ouvrir une nouvelle invite de commande, à accéder au répertoire requirejs, puis à taper ‘python.exe module.py’ .

Le but final
Je voudrais avoir un moyen de gérer et d’utiliser des environnements virtuels sans avoir à être à l’invite de commande (Windows uniquement)

Liste de souhaits
1. Être capable d’installer des modules à partir de pip (ligne de commande) ou de binarys (pour ceux qui ne peuvent pas être installés avec pip pour une raison quelconque).
2. Gérer les environnements, avec virtualenv.exe, à partir d’une interface graphique. (Créer, supprimer, lister, activer, etc …)

Recherche
Jusqu’à présent, j’ai pu créer des morceaux de ma liste de souhaits en utilisant différents scripts / méthodes, mais je n’ai pas encore trouvé le moyen de les combiner. J’avais l’intention de combiner la plupart de ces éléments dans une interface graphique, mais je pensais qu’il serait sage de savoir s’il existe une bonne raison pour que cela n’existe pas déjà.

L’installation de binarys dans un environnement virtuel peut se faire assez facilement en utilisant un script qui change la version de python enregistrée dans Windows. J’utilise le script depuis plusieurs mois maintenant avec rien d’autre que d’excellents résultats. Voir SO Question

La gestion des environnements semble être la partie la plus difficile.

Si vous utilisez bash, il y a virutalenvwrapper écrit par Doug Hellmann. Je l’utilise lorsque je travaille sur Mac OSX et le recommande vivement.

Il existe un port de cet effort dans Power Shell , mais une interface d’invite de commande tierce doit toujours être installée.

Un des ports les plus uniques vers Windows que j’ai vu les ports virtualenvwrapper aux fichiers bat. Je n’ai pas testé cela, mais cela nécessiterait toujours l’utilisation de l’invite de commande. Trouvé ici

La fonction d’assistance la plus prometteuse que j’ai trouvée à ce jour est écrite par Justin Driscoll. Alors que cet exemple exact nécessiterait l’invite de commande, il serait sortingvial de le convertir en quelque chose qu’une interface graphique Python pourrait appeler. C’était la voie que je suivais avant de penser à vérifier avec les masses la meilleure façon d’atteindre mon objective.

Vous voudrez peut-être jeter un coup d’oeil à zc.buildout . En supposant que l’utilisateur a installé Python, vous pouvez double-cliquer sur le script python bootstrap.py pour générer l’environnement.

Une fois créé, le double clic sur bin\buildout.exe installe récursivement les dépendances et exécute toutes les méthodes de pré / post hook bin\buildout.exe . zc.buildout vous permet de spécifier des dépendances spécifiques à la plate-forme et des dépendances non-python. De plus, vous pouvez définir vos propres scripts pour le buildout dans le dossier bin\ . Par exemple, l’équipe Plone dispose d’un bon article exécutant Buildout sous Windows en référençant son propre script bin\instance.exe

Bien que cela ne soit pas aussi précis que virtualenv sur Mac / Linux / BSD, le même environnement de compilation sera créé (par exemple, bin/buildout au lieu de bin\buildout.exe ) pour bin\buildout.exe aux exigences multiplateformes que vous avez.