Comment puis-je utiliser pywin32 avec un virtualenv sans avoir à inclure le dossier site-packages de l'environnement hôte ?
-
11-09-2019 - |
Question
je travaille avec PyInstaller sous Python 2.6, qui n'est que partiellement pris en charge en raison du désordre créé par MS avec leurs absurdités manifestes qui affectent désormais Python puisqu'il est désormais compilé en MSVC8.
Le problème est que la prise en charge de l'intégration du manifeste repose sur le pywin32 extensions afin de construire ce qui est pénible car sans inclure le dossier site-packages de l'hôte lorsque je crée le environnement virtuel (cela va un peu à l'encontre du but dans un environnement de construction) Je ne trouve pas de moyen d'installer les extensions requises afin qu'elles soient accessibles à PyInstaller.
Quelqu'un a-t-il trouvé une solution à ce problème ?
La solution 3
OK, bien que je devais trouver une voie à suivre, j'improvise. Je l'ai créé en interne un dépôt git avec une version piratée-ensemble de pywin32 qui installera dans un virtualenv en utilisant le script standard setup.py
. Il a fallu beaucoup de bricoler pour le faire fonctionner raison, mais je réussi à le faire charger et le code dépendant fonctionne maintenant comme je l'ai besoin pour. Si les gens se sentent que ce serait bénéfique pour la communauté s'il vous plaît poster un commentaire. Si je reçois assez, je vais essayer de mettre quelque chose sur mon compte github
Autres conseils
J'ai trouvé http://old.nabble.com/ windows: -virtualenv-et-pywin32 - td27658201.html (maintenant un lien mort) qui a offert la solution suivante:
- http://sourceforge.net/projects/pywin32/files/ pour la URL de l'exe que vous voulez
- Activer votre virtualenv
- Exécuter
easy_install http://PATH.TO/EXE/DOWNLOAD
Cela fonctionne avec les versions modernes de setuptools (vers Février 2014 rapportés par tovmeod dans les commentaires).
Si vous utilisez une ancienne version de setuptools (ou le distribuer réincorporé dans setuptools), vous pouvez obtenir ce message d'erreur:
erreur: c: \ users \ blah \ AppData \ temp local \ \ easy_install-ibkzv7 \ pywin32-214.win32-py2.6.exe n'est pas un distutils Windows valide .exe
Dans ce cas:
- Télécharger le vous-même exe
- Activer votre virtualenv
- Exécuter
easy_install DOWNLOADED_FILE.exe
Je préfère l'espérons essayé « pip installer » plutôt que « easy_install », mais cela n'a pas fonctionné, et probablement ne le sera jamais (citation nécessaire).
Enfin, j'ai trouvé, mais ne l'ai pas testé une solution à http://www.mail-archive.com/python-list@python.org/msg272040.html qui est:
Résolu en copiant le fichier pywin32.pth dans mon virtualenv site-packages et la modification du fichier pour pointer vers le chemin.
Si les autres options ne fonctionnent pas pour vous, peut-être cette volonté?
Pour Python 2.7 ou l'utilisation 3.x pypiwin32 .
pip install pypiwin32
Cela peut avoir été améliorée depuis la réponse précédente, depuis que je suis pywin32 installé avec succès sur bac à sable sur plusieurs machines sans « hacks » spécifiques:
$ 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:
- windows 7
- git
- python 2.7.10 avec virtualenv
- VS2008. Il peut aussi travailler (mais je l'ai pas encore testé) avec http://www.microsoft.com/en-us/download /details.aspx?id=44266
Modifier:Grattez ceci pour l'instant, il semble y avoir encore des problèmes avec l'installation...
J'étais plutôt fatigué de toute la situation et je viens de créer un jeu de roues converties ("wheel convert <.exe>").J'essaierai de les maintenir à jour 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 en utilisant pip et en pointant vers le package correspondant à votre version et à votre architecture.Par exemple, pour Python 3.5/amd64 :
installation pip https://tr00st.co.uk/python/wheel/pywin32/pywin32-219-cp35-none-win_amd64.whl
Mise en garde:Le processus --upgrade échoue actuellement, car la procédure de désinstallation est incapable de nettoyer après elle-même (accès refusé lors du nettoyage de win32api.pyd) - ce n'est que lors de la suppression du répertoire temporaire, qui peut être supprimé manuellement.Le moyen le plus simple consiste à désinstaller et réinstaller au lieu de mettre à niveau, puis à supprimer manuellement le dossier temporaire.