web-dev-qa-db-fra.com

Comment utiliser pywin32 avec virtualenv sans avoir à inclure le dossier site-packages de l'environnement hôte?

Je travaille avec PyInstaller sous Python 2.6, qui n’est que partiellement supporté en raison du gâchis que MS a créé avec leur nonense manifeste, qui affecte maintenant Python car il est maintenant compilé avec MSVC8.

Le problème est que le support d’incorporation de manifestes repose sur les extensions pywin32 afin de créer ce qui est pénible, car sans inclure le dossier site-packages de l’hôte lors de la création du virtualenv ( Je ne parviens pas à installer les extensions requises, elles sont donc accessibles à PyInstaller.

Quelqu'un a-t-il trouvé une solution à ce problème?

51
jkp

OK, et bien depuis que je devais trouver un moyen d'avancer, j'ai improvisé. J'ai créé en interne un référentiel git avec une version de pywin32 piratée qui s'installera dans virtualenv à l'aide du script standard setup.py. Il a fallu beaucoup de bidouillage pour que tout fonctionne correctement, mais j’ai réussi à le charger et le code dépendant fonctionne maintenant comme il me fallait. Si les gens pensent que cela profitera à la communauté, merci de poster un commentaire: si j'en ai assez, j'essaierai de mettre quelque chose sur mon compte github.

4
jkp

J'ai trouvé http://old.nabble.com/Windows:-virtualenv-and-pywin32--td27658201.html (maintenant un lien mort) qui proposait la solution suivante:

  1. Parcourir http://sourceforge.net/projects/pywin32/files/ pour l'URL de l'exe que vous voulez
  2. Activer votre virtualenv
  3. Exécuter easy_install http://PATH.TO/EXE/DOWNLOAD

Cela fonctionne avec les versions modernes de setuptools (vers février 2014, rapporté par tovmeod dans les commentaires).


Si vous utilisez une ancienne version de setuptools (ou que vous la redistribuez à nouveau dans setuptools), le message d'erreur suivant peut s'afficher:

erreur: c:\users\blah\appdata\local\temp\easy_install-ibkzv7\pywin32-214.win32-py2.6.exe n'est pas un fichier distutils valide Windows .exe

Dans quel cas:

  1. Téléchargez l'exe vous-même
  2. Activer votre virtualenv
  3. Exécuter easy_install DOWNLOADED_FILE.exe

J'espère plutôt avoir essayé "pip install" plutôt que "easy_install", mais cela n'a pas fonctionné et ne le fera probablement jamais (citation nécessaire).


Enfin, j'ai trouvé une solution sur http://www.mail-archive.com/[email protected]/msg272040.html qui n'a pas été testée -/qui est:

Ce problème a été résolu en copiant le fichier pywin32.pth dans mes packages-site virtualenv Et en modifiant le fichier pour qu'il pointe vers le chemin.

Si les autres options ne fonctionnent pas pour vous, peut-être que ça va?

73
d3vid

Pour Python 2.7 ou 3.x, utilisezpypiwin32.

pip install pypiwin32

12

Edit: Scratch this for now, certains problèmes d'installation persistent ...

J'en ai assez de la situation et je viens de créer un jeu de roues converties ("wheel convert <.exe>"). Je vais essayer de les garder pour la version la plus récente, mais criez s'il y a des problèmes.

https://tr00st.co.uk/python/wheel/pywin32/

L'installation peut être effectuée facilement à l'aide de pip et en pointant sur le package correspondant à votre version et à votre architecture. Par exemple, pour Python 3.5/AMD64:

pip install https://tr00st.co.uk/python/wheel/pywin32/pywin32-219-cp35-none-win_AMD64.whl

Avertissement: le processus --upgrade échoue actuellement, car la procédure de désinstallation ne parvient pas à se nettoyer elle-même (accès refusé lors du nettoyage de win32api.pyd) - il ne s'agit que de la suppression du répertoire temporaire pouvant être supprimé manuellement. Le moyen le plus simple consiste à désinstaller et à réinstaller le système au lieu de le mettre à niveau, puis de supprimer manuellement le dossier temporaire.

0
tr00st

Cela peut avoir été amélioré depuis la réponse précédente, depuis que j'ai installé avec succès pywin32 sur le bac à sable sur plusieurs machines sans "piratage" spécifique:

$ virtualenv sandbox
$ sandbox\scripts\activate
(sandbox) $ git clone https://github.com/Travis-Sun/pywin32.git
(sandbox) $ cd pywin32
(sandbox) $ python setup.py install

Testé avec l'environnement suivant:

0
cthepenier