12
votes

Comment réparer "ImportError: le chargement de la DLL a échoué" lors de l'importation de win32api

Je mets en place un autoclicker dans Python 3.8 et j'ai besoin de win32api pour GetAsyncKeyState mais cela me donne toujours cette erreur:

>>> import win32api

Je suis sous Windows 10 Famille 64x. J'ai déjà essayé

pip install pypiwin32

et il s'installe avec succès mais rien ne change. J'ai également essayé de désinstaller et de réinstaller python. J'ai également essayé d'installer 'django' de la même manière et cela fonctionne réellement lorsque import django , donc je pense que c'est uniquement un problème win32api.

>>> import win32api
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed while importing win32api: The specified module could not be found.

Je m'attends à ce que la sortie soit nulle, mais la sortie réelle est toujours cette erreur ^^


0 commentaires

10 Réponses :


2
votes

pypiwin32 est une distribution obsolète. Désinstallez-le et installez pywin32 :

pip uninstall pypiwin32
pip install pywin32


4 commentaires

merci mais malheureusement rien ne change .. voici ce que j'ai fait Successfully uninstalled pypiwin32-223 C:\Users\gfroz\AppData\Local\Programs\Python\Python38-32\Scr‌​ipts>pip install pywin32 Requirement already satisfied: pywin32 in c:\users\gfroz\appdata\local\programs\python\python38-32\lib‌​\site-packages (225) puis >>> import win32api Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: DLL load failed while importing win32api: Impossibile trovare il modulo specificato.


Essayez de le réinstaller; après toutes vos expériences avec différents packages, les DLL peuvent être cassées: pip install --ignore-installed pywin32


Merci beaucoup! en fait, cela n'a pas fonctionné en premier lorsque je viens d'installer pywin32 mais ensuite j'ai écrit dans le dossier scripts pywin32_postinstall.py -install , puis j'ai essayé d' import win32api et aucune erreur n'apparaît!


Tout ce que pywin32_postinstall.py fait est de copier pywintypes [version pyton] .dll et pythoncom [pyver] .dll de \ Lib \ site-packages \ pywin32_system32 \ dans le répertoire principal. En fait, mieux vaut simplement copier manuellement dans \ Library \ bin. Ensuite, tout fonctionne.



21
votes

Pour mon cas, installer et réinstaller pywin32 n'aide pas. Après avoir copié les deux fichiers de Lib\site-packages\pywin32_system32 vers C:\Windows\System32 , cela fonctionne.

Mon environnement est python 3.8 dans miniconda. Les deux fichiers sont pythoncom38.dll et pywintypes38.dll .


6 commentaires

où est ce chemin Lib\site-packages\pywin32_system32 ?


Cela a fonctionné pour mon problème. J'utilise Pyhon3.8 non plus. Je veux savoir pourquoi ça arrive?


Même problème sous Python 3.8. La solution fonctionne, mais j'ai dû prendre les fichiers dans le dossier Lib mon environnement virtuel


Celui-ci m'a vraiment aidé. Je suppose que le problème est avec la version Python 3.8.


Cela m'a aidé pour 3,7 également.


Ces informations ont aidé, mais mettre des éléments tiers dans C: \ Windows \ System32 est une recette pour de futurs problèmes. Pensez par exemple à ce qui se passera si pywin32 met à jour la DLL et que vous ne les copiez pas à nouveau dans C: \ Windows \ System32 après une mise à jour pip. Vous obtiendrez un système incohérent. De plus, tous les programmes de l'ordinateur "verront" ces DLL. Vous devriez plutôt définir le PATH comme / si nécessaire.



9
votes

Exécutez Scripts \ pywin32_postinstall.py -install dans une invite de commande Admin

réf: https://github.com/mhammond/pywin32/issues/1431

edit: L'utilisateur @JoyfulPanda a donné un avertissement:

L'exécution de ce script avec les droits d'administrateur copiera également pythoncom37.dll, pywintypes37.dll (correspondant à la version pywin32), dans C:\WINDOWS\system32 , ce qui écrasera effectivement les versions DLL correspondantes d'Anaconda déjà présentes. Cette dernière cause des problèmes lors de l'ouverture (sous Windows) "Menu Démarrer> Anaconda3 (64 bits)> Invite Anaconda (a_virtual_env_name)". Au moins Anaconda 2019.07 a pywin32 223 installé par défaut. Pywin32 224 peut fonctionner, mais 225-228 pose problème pour Anaconda (2019.07)


3 commentaires

Pour exécuter pywin32_postinstall.py, vous devez python pywin32_postinstall.py -install , sinon vous obtiendrez une erreur d'importation à propos de winreg


L'exécution de ce script avec les droits d'administrateur copiera également pythoncom37.dll , pywintypes37.dll (correspondant à la version pywin32), dans `C: \ WINDOWS \ system32`, qui écrasera effectivement les versions DLL correspondantes d'Anaconda déjà présentes. Cette dernière cause des problèmes lors de l'ouverture (sous Windows) "Menu Démarrer> Anaconda3 (64 bits)> Invite Anaconda (a_virtual_env_name)". Au moins Anaconda 2019.07 a pywin32 223 installé par défaut. Pywin32 224 peut fonctionner, mais 225-228 pose problème pour Anaconda (2019.07).


pip install --upgrade pywin32 == 225 a fonctionné pour moi..Thx



0
votes

Dans la référence à cette question de commentaire

où est ce chemin Lib \ site-packages \ pywin32_system32?

Allez dans le répertoire C, Users, votre nom d'utilisateur, anaconda3, Lib, site-packages, pywin32_system32. vous pouvez trouver facilement.

C: \ Users \ HP \ anaconda3 \ Lib \ site-packages \ pywin32_system32


0 commentaires

8
votes

Pour moi, cela a fonctionné en rétrogradant mon pywin32 de la version 227 à la version 224. Tapez simplement la commande suivante sur n'importe quel shell en mode administrateur:

pip install --upgrade pywin32==224


4 commentaires

J'obtiens cette erreur sous Python3.8: Impossible de trouver une version qui satisfait à l'exigence pywin32 == 224 (à partir des versions: 225, 226, 227, 228)


Pour python 3.8, si vous ne trouvez pas pywin32 == 224, essayez pywin32 == 225. Cela a fonctionné pour moi.


@Guido Vous devez activer l'environnement de base conda activate base


Vous ne devez pas activer l'environnement de base, seulement l'environnement que vous souhaitez utiliser. Le déclassement de 228 à 225 a fonctionné pour moi. pip install --upgrade pywin32==225 worked



5
votes

Cela se produit lorsque Lib\site-packages\pywin32_system32 n'est pas dans la liste des répertoires pour rechercher DLL (variable d'environnement PATH).

pywin32 (ou l'une de ses dépendances) ajoute ce chemin lors de l'exécution à la variable PATH. Si cela échoue, ou si un autre composant remplace le PATH après qu'il a été défini par pywin32, vous obtiendrez l'erreur donnée (ImportError: le chargement de la DLL a échoué lors de l'importation de win32api).

Vous pouvez essayer d'étendre la variable PATH dans le shell avant de démarrer Python.

Sous Windows:

os.environ["PATH"] = r"/.../pywin32_system32:" + os.environ["PATH"]

Sur les systèmes de type Unix:

os.environ["PATH"] = r"c:\...\pywin32_system32;" + os.environ["PATH"]

Si cela ne fonctionne pas, alors le PATH peut être remplacé dans le programme Python lors de l'exécution. Ajoutez la ligne suivante à votre programme juste avant que pywin32 ne soit utilisé pour vérifier sa valeur:

import os
print(os.environ["PATH"])

En dernier recours, vous pouvez étendre la variable PATH avant le chargement de pywin32:

Les fenêtres:

export PATH=c:\...\Lib\site-packages\pywin32_system32:$PATH

Unix comme:

set PATH=c:\...\Lib\site-packages\pywin32_system32;%PATH%


2 commentaires

J'ai ajouté le chemin absolu de 'pywin32_system32' à os.environ ['PATH'] et je ne peux toujours pas importer win32api. Seule la copie des deux dll sur le system32 peut fonctionner.


Peut-être à cause de ce changement dans la version 3.8: les dépendances DLL pour les modules d'extension et les DLL chargées avec des ctypes sous Windows sont désormais résolues de manière plus sécurisée. Seuls les chemins système, le répertoire contenant le fichier DLL ou PYD et les répertoires ajoutés avec add_dll_directory () sont recherchés pour les dépendances au moment du chargement. Plus précisément, PATH et le répertoire de travail actuel ne sont plus utilisés et les modifications apportées à ceux-ci n'auront plus aucun effet sur la résolution DLL normale.



3
votes

Selon pywin32 github, vous devez exécuter

python path\to\python\Scripts\pywin32_postinstall.py -install

et après ça, tu dois courir

pip install pywin32

pris d' ici . travaillé pour moi!


0 commentaires

0
votes

Actuellement, il existe deux copies des fichiers pythoncom * .dll dans les répertoires. Pycharm utilise la copie dans le répertoire C: \ Windows \ System32: -

C: \ Windows \ System32 C: \ Users \ sharandi \ AppData \ Local \ Programs \ Python \ Python38 \ Lib \ site-packages \ pywin32_system32

Les fichiers sont: - pythoncom38.dll - 559 Ko pywintypes38.dll - 138 Ko


0 commentaires

5
votes

Résolu

Si vous travaillez dans un environnement miniconda sur conda. Vous pouvez simplement installer pywin32 en utilisant conda au lieu de pip.

Cela a résolu mon problème

conda installer pywin32


1 commentaires

c'est une bouée de sauvetage, merci!



0
votes

J'ai téléchargé et installé le dernier package Microsoft Visual C ++ 2015-2019 à partir de ( https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads ). Vous devrez peut-être redémarrer votre machine après l'installation.

Puis à partir de l'invite de commande conda, activez votre environnement virtuel et allez dans le dossier Scripts de l'environnement virtuel (> cd "chemin de venv" / Scripts)

Une fois que vous êtes dans le dossier Scripts, exécutez la commande suivante "python pywin32_postinstall.py -install"

Cela installera les DLL requises dans les dossiers appropriés de l'environnement virtuel.

Et c'est comme ça que je l'ai fait fonctionner!


0 commentaires