Skip to content

Instantly share code, notes, and snippets.

@MoePus
Created January 22, 2021 08:25
Show Gist options
  • Save MoePus/3b68e82d181cbe5060c67833b327c662 to your computer and use it in GitHub Desktop.
Save MoePus/3b68e82d181cbe5060c67833b327c662 to your computer and use it in GitHub Desktop.
python static build on windows.md

replace all <ConfigurationType>DynamicLibrary</ConfigurationType> with <ConfigurationType>StaticLibrary</ConfigurationType> in *.vcxproj

#define Py_NO_ENABLE_SHARED
#define MS_NO_COREDLL
``` in pyconfig.h

remove `Py_ENABLE_SHARED` in pythoncore.vcxproj

manual set MT and /Zl in all vcxproj.

add 
```      <AdditionalDependencies>_asyncio.pyd;_bz2.pyd;_ctypes.pyd;_decimal.pyd;_elementtree.pyd;_hashlib.pyd;_lzma.pyd;_msi.pyd;_multiprocessing.pyd;_overlapped.pyd;_queue.pyd;_socket.pyd;_sqlite3.pyd;_ssl.pyd;_uuid.pyd;_zoneinfo.pyd;pyexpat.pyd;select.pyd;unicodedata.pyd;version.lib;shlwapi.lib;ws2_32.lib;pathcch.lib;crypt32.lib;cabinet.lib;msi.lib;rpcrt4.lib;iphlpapi.lib;rpcrt4.lib;sqlite3.lib;liblzma.lib;libcrypto_static.lib;libssl_static.lib;libffi.lib;%(AdditionalDependencies)</AdditionalDependencies>

for all exe output vcxproj s

  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalOptions>/Zl %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
  </ItemDefinitionGroup>

for all lib output vcxproj s

comment_out

<TestModules Include="_ctypes_test;_testbuffer;_testcapi;_testinternalcapi;_testembed;_testimportmultiple;_testmultiphase;_testconsole" />
    <TestModules Include="xxlimited" Condition="'$(Configuration)' == 'Release'" />

and

<Projects2 Condition="$(Platform) != 'ARM' and $(Platform) != 'ARM64'" Include="_freeze_importlib.vcxproj" />
``` in pcbuild.proj



edit config.c

extern PyObject* PyInit__asyncio(void); extern PyObject* PyInit__bz2(void); extern PyObject* PyInit__ctypes(void); extern PyObject* PyInit__decimal(void); extern PyObject* PyInit__elementtree(void); extern PyObject* PyInit__hashlib(void); extern PyObject* PyInit__lzma(void); extern PyObject* PyInit__msi(void); extern PyObject* PyInit__multiprocessing(void); extern PyObject* PyInit__overlapped(void); extern PyObject* PyInit__queue(void); extern PyObject* PyInit__socket(void); extern PyObject* PyInit__sqlite3(void); extern PyObject* PyInit__ssl(void); extern PyObject* PyInit__uuid(void); extern PyObject* PyInit_pyexpat(void); extern PyObject* PyInit_select(void); extern PyObject* PyInit_unicodedata(void);

{"_asyncio", PyInit__asyncio}, {"_bz2", PyInit__bz2}, {"_ctypes", PyInit__ctypes}, {"_decimal", PyInit__decimal}, {"_elementtree", PyInit__elementtree}, {"_hashlib", PyInit__hashlib}, {"_lzma", PyInit__lzma}, {"_msi", PyInit__msi}, {"_multiprocessing", PyInit__multiprocessing}, {"_overlapped", PyInit__overlapped}, {"_queue", PyInit__queue}, {"_socket", PyInit__socket}, {"_sqlite3", PyInit__sqlite3}, {"_ssl", PyInit__ssl}, {"_uuid", PyInit__uuid}, {"pyexpat", PyInit_pyexpat}, {"select", PyInit_select}, {"unicodedata", PyInit_unicodedata},


#ifdef MS_COREDLL SET_SYS_FROM_STRING("winver", PyUnicode_FromString(PyWin_DLLVersionString)); #else extern void* __ImageBase; SET_SYS_FROM_STRING("dllhandle", PyLong_FromVoidPtr((void*)&__ImageBase)); #endif



refactor `OverlappedType` to `_OverlappedType` in _winapi.c

move `const char *PyWin_DLLVersionString = MS_DLL_ID;` out of `#ifdef Py_ENABLE_SHARED` in dl_nt.c

remove `#ifdef Py_ENABLE_SHARED` in `calculate_module_search_path` and for `getpythonregpath` in getpathp.c
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment