Ошибка: "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]()
Ответы
Ответ 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 без проблем.