K0lb3 / UnityPy

UnityPy is python module that makes it possible to extract/unpack and edit Unity assets
MIT License
761 stars 113 forks source link

Is Windows SDK required for installing UnityPy? #223

Closed ghost closed 6 months ago

ghost commented 6 months ago

I am new with code packaging and how PyPI works. I apologize for possible mistakes made here; please bear with me. \ \ I am running a Windows 10 operating system and ran into a problem installing UnityPy on my machine:

  1. I try installing it using python -m pip install UnityPy using PowerShell 5.1.
  2. I run into a problem building the wheels for texture2ddecoder and etcpak, so the installation fails.
  3. My shell output tells me I am missing Microsoft Visual C++ 14.0+. This page link was provided as a place to install it, so I install it.
  4. I try installling UnityPy again after getting the Build Tools, and it still does not work.
  5. So I modify my existing Build Tools installation with the Desktop development with C++ workload. I did not select this initially because I thought I could just install only the Build Tools and it would be fine. So I now install this workload and only its core features, and I get the same installation error: I need Microsoft Visual C++ 14.0+.
  6. I modify my C++ workload with the optional MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest) component, believing this to be what is asked for, and try installing UnityPy again. I receive this error in my shell output:
    cl : Command line warning D9002 : ignoring unknown option '-std=c++11'
      astc.cpp
      src\Texture2DDecoder\astc.cpp(2): fatal error C1083: Cannot open include file: 'math.h': No such file or directory    error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Tools\\MSVC\\14.38.33130\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
  7. So then I modify the workload again with the Windows 10 SDK (10.0.20348.0) component (not 11 SDK because I am running Windows 10), believing this to be the actual Build Tools I need. I try installing UnityPy again, and it now installs successfully.

\ \ For Windows users, is the Windows SDK required to install UnityPy? I do not see on the README.md specifically say that the Windows 10 SDK is required to install UnityPy using pip, only that the C++ redistributable was required for the Brotli dependency. But I never ran into an issue installing Brotli; just texture2ddecoder and etcpak, which required the Build Tools. \ It would be helpful if the README was updated to include these requirements for installation on Windows machines, based on what I tested:

K0lb3 commented 6 months ago

texture2ddecoder and etcpak are C-extensions as you likely already guessed. Using github workflow they get precompiled and uploaded to pypi.

The precompiled versions are only available for python versions that were released at the point in time when the workflow was last run. For both of them this was the case before Python 3.12. As you likely have installed Python 3.12 pip couldn't find a binary version for both, and therefore tried to compile them. This is usually no problem on Linux and Mac, but is seriously annoying on Windows as you noticed, but common enough to find guides for it.

Anyway, I fixed the workflows for both texture2ddecoder and etcpak just now, so there are now binary versions for both of them available on pypi. The main problem for keeping the workflows for binary up to date are the used dependencies. cibuildwheels (cross compiling) just loves to do breaking changes, Pillow simply stopped supporting 32bit and some other minor uses, and some issues. So....I tend to just wait for people to report an issue to update them -.-'

ghost commented 6 months ago

Thanks for the explanations, for updating the extensions with the binaries and for taking the time to make this tool work for Windows users. I wanted to test if installing UnityPy would now work without the Windows 10 SDK, so I uninstalled it, all of its extensions, and the C++ workload from my version of Visual Studio. Then I attempted to install UnityPy through pip with just Build Tools 2022 to see if it would work, and it did.

You are right about the missing binaries being a problem that is common enough to find a solution. Though despite the problem being so commonplace, I had to jump through some hoops figuring out what questions I needed to ask when researching my solution, and where to look. Because of my inexperience, figuring out how to solve the specific problem I found myself with during the UnityPy installation process took time. That is why I submitted this issue in hopes of finding a solution to prevent future users from wasting time figuring out just the installation, and a solution was found. It was not an update to the README.md, but it was something better than that.

Thank you again for the fixes.

K0lb3 commented 6 months ago

I guess that adding a note to the readme likely makes sense as you mentioned, I'm just not sure if I should recommend a python downgrade there or a full explanation of the build environment on Windows. Actually, I guess that I can simply link to your list in this issue.