Подтвердить что ты не робот

Ошибка: "MSVCP90.dll: нет такого файла или каталога", даже если установлен пакет Распространяемый Microsoft Visual С++ 2008

Я пытаюсь создать пакет из источника, выполнив python setup.py py2exe

Это раздел кода из setup.py, я полагаю, будет иметь значение:

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\*.*")),

Ошибка:

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

Но я установил "Распространяемый пакет Microsoft Visual С++ 2008". Я запускаю 32-разрядный питон на 64-разрядной Windows 8. Я пытаюсь построить 32-разрядные двоичные файлы.

Также нет такой папки: "C:\Program Files\Microsoft Visual Studio 9.0\VC\redist \". Это то, что содержит мой компьютер:

enter image description here

EDIT:

При поиске msvcp90.dll на моем диске C:\я обнаружил, что они установлены в таких странных путях, как это:

enter image description here

4b9b3361

Ответ 1

Я бы порекомендовал игнорировать зависимость напрямую. Добавьте MSVCP90.dll в список dll_excludes, указанный как опция py2exe. Пользователям необходимо будет установить распространяемый Microsoft Visual С++ 2008. Пример:

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

Ответ 2

(новый ответ, так как другой ответ описывает альтернативное решение)

Вы можете взять файлы из каталога WinSxS и скопировать их в каталог C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT (обычно создаваемый Visual Studio, которого у вас нет). Скопируйте их, чтобы получить следующую структуру:

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

Затем вы можете запустить программу установки (все еще исключая msvcp90.dll, как и в другом ответе), и она должна успешно найти файлы под Microsoft.VC90.CRT и скопировать их как файлы данных в ваш пакет.

Подробнее см. учебник py2exe.

Ответ 3

Я думаю, что это имеет какое-то отношение к пространствам в каталоге. Вы должны попробовать использовать .rstrip(). Например, поставьте это:

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

Затем вы можете использовать каталог переменных, как если бы вы использовали фактический путь.

Это должно сделать python способным распознать каталог, где он не сможет расшифровать его раньше.

Ответ 4

У меня было огромное количество проблем с усложнением в Windows, например проблема, с которой вы столкнулись, а также установка пакетов, таких как Cython, с pip install cython.

Решение, которое наилучшим образом помогло мне после двух недель боли, заключалось в загрузке и запуске неофициального MinGW GCC для Windows при условии здесь. Возможно, вы захотите попробовать сделать это и посмотреть, помогает ли это.

Если вы это сделаете, вы можете удалить MinGW, если он у вас уже есть. Я не знаю, что это строго необходимо, но я всегда делал это на всякий случай. Я установил бок о бок с Cygwin без проблем.