Python 错误:";MSVCP90.dll:没有这样的文件或目录;即使Microsoft Visual C++;已安装2008可再发行软件包
我正试图通过执行Python 错误:";MSVCP90.dll:没有这样的文件或目录;即使Microsoft Visual C++;已安装2008可再发行软件包,python,visual-c++,python-2.7,py2exe,Python,Visual C++,Python 2.7,Py2exe,我正试图通过执行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 = ""
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
<> > >但我安装了“微软Visual C++ 2008可重分发包”。<强>我在64位Windows 8上运行32位Python。我正在尝试构建一个32位二进制文件
也没有类似的文件夹:“C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\”。这是我的计算机包含的内容:
编辑:
在我的C:\驱动器上搜索msvcp90.dll
时,我发现它们安装在如下奇怪的路径中:
我建议完全忽略依赖关系。将
MSVCP90.dll
添加到dll\u排除的列表中
作为py2exe
的一个选项。用户将不得不安装微软Visual C++ 2008可重分发。例如:
setup(
options = {
"py2exe":{
...
"dll_excludes": ["MSVCP90.dll", "HID.DLL", "w9xpopen.exe"],
...
}
},
console = [{'script': 'program.py'}]
)
(新答案,因为另一个答案描述了替代解决方案)
您可以从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
下找到文件,并将它们作为数据文件复制到您的包中
有关更多信息,请参阅。我认为这与目录中的空格有关。您应该尝试使用
.rstrip()
。例如,请将此:
directory='C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT'
directory=directory.rstrip()
然后可以像使用实际路径一样使用变量目录
这将使python能够识别以前无法破译的目录。我曾经在Windows上遇到过大量复杂的问题,比如您面临的问题,以及使用
pip install Cython
安装Cython等软件包
在经历了两周的痛苦之后,最适合我的解决方案是下载并运行Windows提供的非官方MinGW GCC二进制文件。你可能想试着试一试,看看是否有帮助
如果您这样做了,您可能希望卸载MinGW,如果您已经安装了它的话。我不知道这是否绝对必要,但我总是这样做以防万一。我确实让它与Cygwin并排安装,没有任何问题。这些链接可能会有帮助:此代码是否成功:
导入ctypes;lib=ctypes.windell('msvcp90.dll')
@DavidHeffernan:是的,这段代码在pythonshell(IDLE)中成功。在执行代码之后,如果我运行“>>>lib”,它会说py2exe看起来很时髦,那么我想它会在SxS缓存中。我对py2exe一无所知。对不起,VS2008可再发行吗?这是我需要安装的新软件包吗?抱歉,我是说Visual C++ 2008 ReDIST包。我将编辑以修复。如果是这样的话。然后我一次又一次地安装和修理它。但问题仍然存在,您(作为包装商)可以使用dll\u排除
解决问题。您的用户(作为软件包的接收者)需要在使用该程序之前安装redist。使用dll\u excludes
应该可以阻止py2exe查找dll。@claws您可以发送可再发行的安装程序并提示用户安装,而不是发送dll。