Open Mause opened 10 months ago
Doing a diff on the commands generated by CPython's distutils and the one included with setuptools, it looks like the difference might be caused by the name of the build folder - build\temp.win-amd64-3.10\Release
vs build\temp.win-amd64-cpython-312\Release
. The inclusion of cpython
in every single path definitely explains the explosion in size anyway. And turns out we pretty close to the limit even with the CPython copy of distutils, at around 30'000 characters
I guess the question here then is, do we need to migrate away from setuptools? Or is there some way we can split up the link calls?
Hi @Mause thank you very much for reporting this issue.
Is this something that can be solved by changing the LongPathsEnabled
option in the Windows registra? For example:
# powershell
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry
If not, I belive the best would be adding the workaround with the shortening function directly to the pypa/distutils
repository (but probably the pypa/distutils
maintainers will be the best people to advise on that).
Hi @Mause thank you very much for reporting this issue.
Is this something that can be solved by changing the
LongPathsEnabled
option in the Windows registra? For example:# powershell New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry
This is already enabled - without it, the limit is 320 characters I believe
If not, I belive the best would be adding the workaround with the shortening function directly to the
pypa/distutils
repository (but probably thepypa/distutils
maintainers will be the best people to advise on that).
I'm happy to do this, but arguably this just delays the issue, rather than solving it - is there a way to pass link.exe arguments with a file perhaps?
is there a way to pass link.exe arguments with a file perhaps?
The microsoft docs do mention something like "link command files", so in theory yes that would be possible (but I don't know if that would be a solution or the behaviour is just to use the files as if they were directly typed in the terminal... that probably would have to be tested).
Other possibilities include cd-ing
into a parent directory and use relative paths.
I believe that the folks in the pypa/distutils repository would be the best to advise on this.
/cc @zooba (for advice) /cc @jaraco (for advice, is this something to be handled in setuptools or distutils?)
@Mause, one quick question just to make sure we are looking into the correct bug:
Is it expected for the repository in question that the file structure goes deep (more than 32766 chars, considering of course that setuptools will add the <repository root...>\build\temp.win-amd64-cpython-312\Release
prefix), or is there any other bug causing the paths to be nested multiple times?
The compiler and linker don't support long paths, unfortunately.
If the problem is that the overall command line is too long, then a command file is a good option (also helps avoid quoting issues, though as we've mostly got those sorted it probably isn't a big deal anymore). But if the problem is that an individual path exceeds 260 then I don't think there's a way around it yet.
I'll prod the team about this again. Most likely they'll suggest moving the build directory to a shorter path (again)...
Thank you very much @zooba for the advice.
@Mause, this would mean that the "longest" term option we have available is to use the shortening path workaround as you described.
Regarding the path added by setuptools: <project root...>\build\temp.win-amd64-cpython-312
It part can be probably tweaked by setting build_base
and build_temp
in the [build]
section of the setup.cfg
file.
Is it expected for the repository in question that the file structure goes deep (more than 32766 chars, considering of course that setuptools will add ... prefix), or is there any other bug causing the paths to be nested multiple times?
But it might be worth checking if there is no other bug causing unnecessary nesting first.
The compiler and linker don't support long paths, unfortunately.
In my particular case that doesn't matter too much, as the longest path in our codebase is only 113 characters:
build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\thrift\thrift\transport\TTransportException.obj
But it might be worth checking if there is no other bug causing unnecessary nesting first.
I've only eyeballed the paths in question (see my original post for the very long link.exe invocation in question), but I can't see any extra nesting beyond what was there prior in older versions of distutils.
It sounds to me like the link command files are a pretty viable option, and can be combined with the short path names to work around the fact that the compiler and linker don't support long paths as yet (though again, this second part doesn't affect us too much, as individually our paths aren't all that long).
It sounds to me like the link command files are a pretty viable option, and can be combined with the short path names to work around the fact that the compiler and linker don't support long paths as yet (though again, this second part doesn't affect us too much, as individually our paths aren't all that long).
I think the best would be discussing the problem in pypa/distutils
and see if they would accept such a PR there. I say this because currently setuptools patches the functions for finding microsoft's compiler and toolkit, but not the functions for linking or compiling in the MSVCCompiler
class.
as the longest path in our codebase is only 113 characters
This is interesting... so the file paths are actually not getting beyond the limit of 32766 that you get when you change the registry option...
Do you think it is because the command line string is too big? But then I think distutils calls the executables using Popen
without passing through a shell... I am not sure if in that case the line length impacts that much... and the error message should be different, shouldn't it?
It sounds to me like the link command files are a pretty viable option, and can be combined with the short path names to work around the fact that the compiler and linker don't support long paths as yet (though again, this second part doesn't affect us too much, as individually our paths aren't all that long).
I think the best would be discussing the problem in
pypa/distutils
and see if they would accept such a PR there. I say this because currently setuptools patches the functions for finding microsoft's compiler and toolkit, but not the functions for linking or compiling in theMSVCCompiler
class.
Can do
as the longest path in our codebase is only 113 characters
This is interesting... so the file paths are actually not getting beyond the limit of 32766 that you get when you change the registry option...
Do you think it is because the command line string is too big? But then I think distutils calls the executables using
Popen
without passing through a shell... I am not sure if in that case the line length impacts that much... and the error message should be different, shouldn't it?
Yes, that's what this issue is.
Under the hood on windows, Popen calls CreateProcessW.
From the Windows docs:
lpCommandLine
The command line to be executed.
The maximum length of this string is 32,767 characters, including the Unicode terminating null character. If lpApplicationName is NULL, the module name portion of lpCommandLine is limited to MAX_PATH characters.
setuptools version
setuptools==69.0.3
Python version
Python 3.12
OS
Windows
Additional environment information
This is occuring on Windows build agents on Github Actions, when we updated to start building for Python 3.12 (and hence had to switch to using setuptools' distutils fork). Previously we had SETUPTOOLS_USE_DISTUTILS=stdlib set due to an old numpy issue.
This issue is related in the error code to https://github.com/pypa/setuptools/issues/3591, but the issue there doesn't seem to be the same
Description
When we switch from SETUPTOOLS_USE_DISTUTILS=stdlib to the default of
local
, we started seeing[WinError 206] The filename or extension is too long
(though we had to patch distutils to stop it from swallowing this exception and only returningfailed: None
)After further investigation, we found that the call to
link.exe
was longer than the 32766 characters permitted by Windows, hence causing the above error.For now, we've worked around this by patching distutils to call GetShortPathNameW, which manages to shorten the call by around 12000 characters
Expected behavior
The call to link.exe should be shorter than the maximum allowed by Windows, and compilation should succeed, as it did with the version of distutils includes in < Python 3.12
How to Reproduce
pip install -e .
intools/pythonpkg
on Windows 10+Output
Command in question:
Details
```console "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\link.exe" /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\Users\runneradmin\AppData\Local\Temp\cibw-run-515uywyt\cp312-win_amd64\build\venv\libs /LIBPATH:C:\Users\runneradmin\AppData\Local\pypa\cibuildwheel\Cache\nuget-cpython\python.3.12.0\tools\libs /LIBPATH:C:\Users\runneradmin\AppData\Local\pypa\cibuildwheel\Cache\nuget-cpython\python.3.12.0\tools /LIBPATH:C:\Users\runneradmin\AppData\Local\Temp\cibw-run-515uywyt\cp312-win_amd64\build\venv\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\ATLMFC\lib\x64" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x64" /EXPORT:PyInit_duckdb build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\fts\fts_extension.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\fts\fts_indexing.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-dateadd.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-datefunc.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-datepart.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-datesub.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-datetrunc.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-list-range.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-makedate.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-strptime.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-table-range.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-timebucket.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu-timezone.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\.\icu_extension.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\icu\third_party\icu\stubdata\stubdata.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\json\buffered_json_reader.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\json\json_common.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\json\json_deserializer.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\json\json_enums.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\json\json_extension.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\json\json_functions.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\json\json_scan.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\json\json_serializer.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\json\serialize_json.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\json\yyjson\yyjson.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\column_reader.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\column_writer.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\parquet_crypto.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\parquet_extension.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\parquet_metadata.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\parquet_reader.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\parquet_statistics.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\parquet_timestamp.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\parquet_writer.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\serialize_parquet.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\parquet\zstd_file_system.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\tpch\dbgen\bm_utils.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\tpch\dbgen\build.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\tpch\dbgen\dbgen.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\tpch\dbgen\dbgen_gunk.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\tpch\dbgen\permute.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\tpch\dbgen\rnd.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\tpch\dbgen\rng64.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\tpch\dbgen\speed_seed.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\tpch\dbgen\text.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\tpch\tpch_extension.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\common\vector_operations\boolean_operators.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\common\vector_operations\comparison_operators.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\common\vector_operations\generators.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\common\vector_operations\is_distinct_from.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\common\vector_operations\null_operations.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\common\vector_operations\numeric_inplace_operators.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\common\vector_operations\vector_cast.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\common\vector_operations\vector_copy.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\common\vector_operations\vector_hash.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\common\vector_operations\vector_storage.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\verification\copied_statement_verifier.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\verification\deserialized_statement_verifier.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\verification\external_statement_verifier.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\verification\no_operator_caching_verifier.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\verification\parsed_statement_verifier.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\verification\prepared_statement_verifier.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\verification\statement_verifier.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\src\verification\unoptimized_statement_verifier.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\fastpforlib\bitpacking.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\fmt\format.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\fsst\fsst_avx512.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\fsst\libfsst.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\hyperloglog\hyperloglog.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\hyperloglog\sds.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\libpg_query\pg_functions.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\libpg_query\postgres_parser.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\libpg_query\src_backend_nodes_list.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\libpg_query\src_backend_nodes_makefuncs.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\libpg_query\src_backend_nodes_value.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\libpg_query\src_backend_parser_gram.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\libpg_query\src_backend_parser_parser.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\libpg_query\src_backend_parser_scan.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\libpg_query\src_backend_parser_scansup.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\libpg_query\src_common_keywords.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\aes.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\aria.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\asn1parse.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\base64.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\bignum.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\camellia.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\cipher.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\cipher_wrap.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\constant_time.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\entropy.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\entropy_poll.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\gcm.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\md.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\oid.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\pem.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\pk.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\pk_wrap.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\pkparse.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\platform_util.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\rsa.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\rsa_alt_helpers.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\sha1.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\sha256.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\library\sha512.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\mbedtls\mbedtls_wrapper.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\miniz\miniz.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\parquet\parquet_constants.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\parquet\parquet_types.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\bitstate.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\compile.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\dfa.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\filtered_re2.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\mimics_pcre.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\nfa.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\onepass.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\parse.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\perl_groups.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\prefilter.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\prefilter_tree.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\prog.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\re2.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\regexp.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\set.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\simplify.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\stringpiece.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\tostring.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\unicode_casefold.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\re2\unicode_groups.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\util\rune.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\re2\util\strutil.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\skiplist\SkipList.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snappy\snappy-sinksource.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snappy\snappy.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\libstemmer\libstemmer.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\runtime\api.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\runtime\utilities.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_arabic.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_basque.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_catalan.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_danish.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_dutch.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_english.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_finnish.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_french.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_german.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_german2.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_greek.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_hindi.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_hungarian.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_indonesian.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_irish.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_italian.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_kraaij_pohlmann.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_lithuanian.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_lovins.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_nepali.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_norwegian.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_porter.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_portuguese.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_romanian.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_russian.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_serbian.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_spanish.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_swedish.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_tamil.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\snowball\src_c\stem_UTF_8_turkish.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\thrift\thrift\protocol\TProtocol.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\thrift\thrift\transport\TBufferTransports.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\thrift\thrift\transport\TTransportException.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\utf8proc\utf8proc.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\utf8proc\utf8proc_wrapper.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\common\entropy_common.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\common\error_private.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\common\fse_decompress.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\common\xxhash.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\common\zstd_common.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\fse_compress.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\hist.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\huf_compress.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\zstd_compress.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\zstd_compress_literals.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\zstd_compress_sequences.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\zstd_compress_superblock.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\zstd_double_fast.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\zstd_fast.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\zstd_lazy.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\zstd_ldm.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\compress\zstd_opt.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\decompress\huf_decompress.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\decompress\zstd_ddict.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\decompress\zstd_decompress.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\third_party\zstd\decompress\zstd_decompress_block.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_extension_icu_third_party_icu_common.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_extension_icu_third_party_icu_i18n.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_extension_json_json_functions.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_catalog.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_catalog_catalog_entry.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_catalog_catalog_entry_dependency.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_catalog_default.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_adbc.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_adbc_nanoarrow.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_arrow.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_arrow_appender.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_crypto.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_enums.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_operator.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_progress_bar.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_row_operations.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_serializer.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_sort.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_types.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_types_column.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_types_row.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_common_value_operations.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_aggregate_algebraic.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_aggregate_distributive.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_aggregate_holistic.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_aggregate_nested.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_aggregate_regression.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_array.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_bit.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_blob.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_date.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_debug.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_enum.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_generic.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_list.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_map.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_math.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_operators.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_random.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_secret.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_string.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_struct.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_core_functions_scalar_union.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_expression_executor.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_index.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_index_art.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_nested_loop_join.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_aggregate.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_csv_scanner.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_csv_scanner_sniffer.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_filter.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_helper.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_join.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_order.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_persistent.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_projection.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_scan.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_schema.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_operator_set.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_execution_physical_plan.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_aggregate.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_aggregate_distributive.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_cast.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_cast_union.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_pragma.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_scalar.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_scalar_compressed_materialization.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_scalar_generic.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_scalar_list.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_scalar_operators.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_scalar_sequence.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_scalar_string.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_scalar_string_regexp.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_scalar_struct.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_scalar_system.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_table.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_table_arrow.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_table_system.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_function_table_version.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_main.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_main_capi.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_main_capi_cast.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_main_chunk_scan_state.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_main_extension.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_main_relation.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_main_secret.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_main_settings.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_optimizer.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_optimizer_compressed_materialization.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_optimizer_join_order.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_optimizer_matcher.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_optimizer_pullup.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_optimizer_pushdown.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_optimizer_rule.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_optimizer_statistics_expression.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_optimizer_statistics_operator.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parallel.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_constraints.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_expression.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_parsed_data.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_query_node.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_statement.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_tableref.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_transform_constraint.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_transform_expression.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_transform_helpers.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_transform_statement.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_parser_transform_tableref.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_planner.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_planner_binder_expression.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_planner_binder_query_node.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_planner_binder_statement.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_planner_binder_tableref.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_planner_expression.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_planner_expression_binder.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_planner_filter.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_planner_operator.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_planner_subquery.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_storage.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_storage_buffer.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_storage_checkpoint.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_storage_compression.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_storage_compression_chimp.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_storage_metadata.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_storage_serialization.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_storage_statistics.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_storage_table.obj build\temp.win-amd64-cpython-312\Release\duckdb_build\ub_src_transaction.obj build\temp.win-amd64-cpython-312\Release\duckdb_python.obj build\temp.win-amd64-cpython-312\Release\src\arrow\arrow_array_stream.obj build\temp.win-amd64-cpython-312\Release\src\arrow\arrow_export_utils.obj build\temp.win-amd64-cpython-312\Release\src\common\exceptions.obj build\temp.win-amd64-cpython-312\Release\src\dataframe.obj build\temp.win-amd64-cpython-312\Release\src\functional\functional.obj build\temp.win-amd64-cpython-312\Release\src\importer.obj build\temp.win-amd64-cpython-312\Release\src\jupyter\jupyter_progress_bar_display.obj build\temp.win-amd64-cpython-312\Release\src\map.obj build\temp.win-amd64-cpython-312\Release\src\native\python_conversion.obj build\temp.win-amd64-cpython-312\Release\src\native\python_objects.obj build\temp.win-amd64-cpython-312\Release\src\numpy\array_wrapper.obj build\temp.win-amd64-cpython-312\Release\src\numpy\numpy_bind.obj build\temp.win-amd64-cpython-312\Release\src\numpy\numpy_result_conversion.obj build\temp.win-amd64-cpython-312\Release\src\numpy\numpy_scan.obj build\temp.win-amd64-cpython-312\Release\src\numpy\raw_array_wrapper.obj build\temp.win-amd64-cpython-312\Release\src\numpy\type.obj build\temp.win-amd64-cpython-312\Release\src\pandas\analyzer.obj build\temp.win-amd64-cpython-312\Release\src\pandas\bind.obj build\temp.win-amd64-cpython-312\Release\src\pandas\scan.obj build\temp.win-amd64-cpython-312\Release\src\path_like.obj build\temp.win-amd64-cpython-312\Release\src\pybind11\pybind_wrapper.obj build\temp.win-amd64-cpython-312\Release\src\pyconnection.obj build\temp.win-amd64-cpython-312\Release\src\pyconnection\type_creation.obj build\temp.win-amd64-cpython-312\Release\src\pyduckdb\connection_wrapper.obj build\temp.win-amd64-cpython-312\Release\src\pyexpression.obj build\temp.win-amd64-cpython-312\Release\src\pyexpression\initialize.obj build\temp.win-amd64-cpython-312\Release\src\pyfilesystem.obj build\temp.win-amd64-cpython-312\Release\src\pyrelation.obj build\temp.win-amd64-cpython-312\Release\src\pyrelation\initialize.obj build\temp.win-amd64-cpython-312\Release\src\pyresult.obj build\temp.win-amd64-cpython-312\Release\src\python_import_cache.obj build\temp.win-amd64-cpython-312\Release\src\python_udf.obj build\temp.win-amd64-cpython-312\Release\src\typing\pytype.obj build\temp.win-amd64-cpython-312\Release\src\typing\typing.obj /OUT:build\lib.win-amd64-cpython-312\duckdb\duckdb.cp312-win_amd64.pyd /IMPLIB:build\temp.win-amd64-cpython-312\Release\duckdb_build\extension\fts\duckdb.cp312-win_amd64.lib /wd4244 /wd4267 /wd4200 /wd26451 /wd26495 /D_CRT_SECURE_NO_WARNINGS /utf-8 2024-01-05T17:55:49.0688919Z 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x64\\link.exe' failed: None 2024-01-05T17:55:49.0690235Z error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x64\\link.exe' failed: None 2024-01-05T17:55:49.0691031Z [end of output] ```
When patched to dump the stack trace: