Error: "MSVCP90.dll: No such file or directory" even though Microsoft Visual C++ 2008 Redistributable Package is installed

18,873

Solution 1

I would recommend ignoring the dependency outright. Add MSVCP90.dll to the list of dll_excludes given as an option to py2exe. Users will have to install the Microsoft Visual C++ 2008 redistributable. An example:

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

Solution 2

(new answer, since the other answer describes an alternate solution)

You can take the files from the WinSxS directory and copy them to the C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT directory (normally created by Visual Studio, which you don't have). Copy them to get the following structure:

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

Then, you should be able to run the setup program (still excluding msvcp90.dll, as in the other answer), and it should successfully find the files under Microsoft.VC90.CRT and copy them as data files to your bundle.

See the py2exe tutorial for more information.

Share:
18,873
claws
Author by

claws

Updated on June 06, 2022

Comments

  • claws
    claws almost 2 years

    I'm trying to build a package from source by executing python setup.py py2exe

    This is the section of code from setup.py, I suppose would be relevant:

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

    Error it shows:

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

    But I've installed "Microsoft Visual C++ 2008 Redistributable Package". I'm running 32-bit python on 64-bit Windows 8. I'm trying to build a 32-bit binaries.

    Also there is no folder like this: "C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\". This is what my computer contains:

    enter image description here

    EDIT:

    On searching for msvcp90.dll on my C:\ drive I found that they are installed in weird paths like this:

    enter image description here

  • claws
    claws over 11 years
    VS2008 redistributable? Is that some new package that I need to install?
  • nneonneo
    nneonneo over 11 years
    Sorry, I meant the Visual C++ 2008 redist package. I'll edit to fix.
  • claws
    claws over 11 years
    If this is what it is microsoft.com/en-us/download/details.aspx?id=29. Then I've installed it and repaired it again and again. Still the problem persists
  • nneonneo
    nneonneo over 11 years
    You (as the packager) can solve the problem using dll_excludes. Your users (as the receivers of the package) will need to install the redist before using the program. Using dll_excludes should stop py2exe from looking for the DLL.
  • claws
    claws over 11 years
    I want to ship these dlls along with the software.
  • Daniel Kinsman
    Daniel Kinsman over 11 years
    @claws rather than shipping the dlls, you could ship the redistributable installer and promt the user to install it.