Closes #25456: Copy Tcl/Tk DLLs to build directory on Windows
This removes the need to add externals/tcltk[64]/bin to PATH to be able
to import tkinter. Also documents the necessity for the DLLs to be
on PATH or in python.exe's directory.
diff --git a/PCbuild/build.bat b/PCbuild/build.bat
index f3bc1e3..0c482f5 100644
--- a/PCbuild/build.bat
+++ b/PCbuild/build.bat
@@ -82,6 +82,9 @@
nmake -f makefile.vc MACHINE=%machine% OPTS=%options% INSTALLDIR="%tcltkdir%" install-binaries install-libraries
popd
)
+ if not exist "%builddir%tcl86t%tcl_dbg_ext%.dll" (
+ xcopy "%tcltkdir%\bin\tcl86t%tcl_dbg_ext%.dll" "%builddir%"
+ )
if not exist "%tcltkdir%\bin\tk86t%tcl_dbg_ext%.dll" (
pushd "%tkdir%\win"
@@ -90,6 +93,9 @@
nmake -f makefile.vc MACHINE=%machine% OPTS=%options% INSTALLDIR="%tcltkdir%" TCLDIR="%tcldir%" install-binaries install-libraries
popd
)
+ if not exist "%builddir%tk86t%tcl_dbg_ext%.dll" (
+ xcopy "%tcltkdir%\bin\tk86t%tcl_dbg_ext%.dll" "%builddir%"
+ )
if not exist "%tcltkdir%\lib\tix8.4.3\tix84%tcl_dbg_ext%.dll" (
pushd "%tixdir%\win"
diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt
index a3c7fbd..e0c6685 100644
--- a/PCbuild/readme.txt
+++ b/PCbuild/readme.txt
@@ -225,9 +225,15 @@
Unlike the other external libraries listed above, Tk must be built
separately before the _tkinter module can be built. This means that
a pre-built Tcl/Tk installation is expected in ..\externals\tcltk
- (tcltk64 for 64-bit) relative to this directory. See "Getting
- External Sources" below for the easiest method to ensure Tcl/Tk is
- built.
+ (tcltk64 for 64-bit) relative to this directory; the easiest way to
+ do so is to build Python using `build.bat -e`, which will build
+ Tcl, Tk, and Tix and install them as expected. Note that to
+ import and use tkinter, the Tcl and Tk DLLs must be somewhere that
+ python.exe can find them, which means that either
+ ..\externals\tcltk[64]\bin must be added to PATH, or the DLLs must
+ be copied from that folder to be alongside python.exe. `build.bat`
+ takes care of it for you by copying the DLLs into the build
+ directory.
Getting External Sources