web-dev-qa-db-fra.com

Erreur: "MSVCP90.dll: aucun fichier ni répertoire de ce type" même si le package redistribuable Microsoft Visual C++ 2008 est installé

J'essaie de construire un paquet à partir des sources en exécutant python setup.py py2exe

Ceci est la section de code de setup.py, je suppose serait pertinente:

if sys.platform == "win32": # For py2exe.
    import matplotlib
    sys.path.append("C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\redist\\x86\\Microsoft.VC90.CRT")
    base_path = ""
    data_files = [("Microsoft.VC90.CRT", glob.glob(r"C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*")),

Erreur cela montre:

*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory

Mais j'ai installé "Microsoft Visual C++ 2008 Redistributable Package". J'exécute le python 32 bits sous Windows 8 64 bits. J'essaie de créer des fichiers binaires 32 bits.

En outre, il n’existe pas de dossier semblable à celui-ci: "C:\Programmes\Microsoft Visual Studio 9.0\VC\redist \". Voici ce que contient mon ordinateur:

enter image description here

MODIFIER:

En recherchant msvcp90.dll sur mon lecteur C: \, j'ai constaté qu'ils sont installés dans des chemins étranges comme celui-ci:

enter image description here

19
claws

Je recommanderais d'ignorer la dépendance. Ajoutez MSVCP90.dll à la liste de dll_excludes donnée en option à py2exe. Les utilisateurs devront installer Microsoft Visual C++ 2008 redistribuable. Un exemple:

setup(
    options = {
            "py2exe":{
            ...
            "dll_excludes": ["MSVCP90.dll", "HID.DLL", "w9xpopen.exe"],
            ...
        }
    },
    console = [{'script': 'program.py'}]
)
12
nneonneo

(nouvelle réponse, l'autre réponse décrivant une solution alternative)

Vous pouvez extraire les fichiers du répertoire WinSxS et les copier dans le répertoire C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT (créé normalement par Visual Studio, que vous n’avez pas). Copiez-les pour obtenir la structure suivante:

  +-Microsoft.VC90.CRT
  | |
  | +-Microsoft.VC90.CRT.manifest
  | +-msvcm90.dll
  | +-msvcp90.dll
  | +-msvcr90.dll

Ensuite, vous devriez pouvoir exécuter le programme d’installation (en excluant toujours msvcp90.dll, comme dans l’autre réponse), trouver les fichiers sous Microsoft.VC90.CRT et les copier sous forme de fichiers de données dans votre bundle.

Voir le didacticiel py2exe pour plus d'informations.

3
nneonneo

J'avais un grand nombre de problèmes de complication sous Windows, comme le problème auquel vous êtes confronté, ainsi que l'installation de paquets comme Cython avec pip install cython.

La solution qui a le mieux fonctionné pour moi après deux semaines de souffrance était de télécharger et d’exécuter le binaire non officiel MinGW GCC pour Windows fourni ici . Vous voudrez peut-être essayer de tenter votre chance et voir si cela vous aide.

Si vous le faites, vous voudrez peut-être désinstaller MinGW si vous en avez déjà un. Je ne sais pas si c'est strictement nécessaire, mais je l'ai toujours fait au cas où. Je l’ai fait installer côte à côte avec Cygwin sans aucun problème.

0
jdotjdot

Je pense que cela a quelque chose à voir avec les espaces dans le répertoire. Vous devriez essayer d'utiliser .rstrip(). Par exemple, mettez ceci:

directory='C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT'
directory=directory.rstrip()

Vous pouvez ensuite utiliser le répertoire de variables comme vous auriez utilisé le chemin réel.

Cela devrait permettre à python de reconnaître le répertoire là où il ne pourrait pas le déchiffrer auparavant.

0
PygameNerd