Home | History | Annotate | only in /external/python/cpython3/Tools/msi
Up to higher level directory
NameDateSize
build.bat22-Oct-20202.3K
buildrelease.bat22-Oct-20209.2K
bundle/22-Oct-2020
common.wxs22-Oct-20204.2K
common_en-US.wxl_template22-Oct-20201.4K
core/22-Oct-2020
csv_to_wxs.py22-Oct-20204.9K
dev/22-Oct-2020
distutils.command.bdist_wininst.py22-Oct-2020646
doc/22-Oct-2020
exe/22-Oct-2020
generate_md5.py22-Oct-2020679
get_externals.bat22-Oct-20202.7K
launcher/22-Oct-2020
lib/22-Oct-2020
make_appx.ps122-Oct-20202.2K
make_cat.ps122-Oct-20201.1K
make_zip.proj22-Oct-20201.9K
msi.props22-Oct-20209K
msi.targets22-Oct-20205.2K
path/22-Oct-2020
pip/22-Oct-2020
purge.py22-Oct-20201.8K
README.txt22-Oct-202022.7K
sdktools.psm122-Oct-20201.6K
sign_build.ps122-Oct-20201,016
tcltk/22-Oct-2020
test/22-Oct-2020
testrelease.bat22-Oct-20204.1K
tools/22-Oct-2020
ucrt/22-Oct-2020
uploadrelease.bat22-Oct-20205K
uploadrelease.proj22-Oct-20206.7K
wix.props22-Oct-2020966

README.txt

      1 Quick Build Info
      2 ================
      3 
      4 For testing, the installer should be built with the Tools/msi/build.bat
      5 script:
      6 
      7     build.bat [-x86] [-x64] [--doc]
      8 
      9 For an official release, the installer should be built with the
     10 Tools/msi/buildrelease.bat script and environment variables:
     11 
     12     set PYTHON=<path to Python 2.7 or 3.4>
     13     set SPHINXBUILD=<path to sphinx-build.exe>
     14     set PATH=<path to Mercurial (hg.exe)>;
     15              <path to HTML Help Compiler (hhc.exe)>;%PATH%
     16 
     17     buildrelease.bat [-x86] [-x64] [-D] [-B]
     18         [-o <output directory>] [-c <certificate name>]
     19 
     20 See the Building the Installer section for more information.
     21 
     22 Overview
     23 ========
     24 
     25 Python is distributed on Windows as an installer that will configure the
     26 user's system. This allows users to have a functioning copy of Python
     27 without having to build it themselves.
     28 
     29 The main tasks of the installer are:
     30 
     31 * copy required files into the expected layout
     32 * configure system settings so the installation can be located by
     33   other programs
     34 * add entry points for modifying, repairing and uninstalling Python
     35 * make it easy to launch Python, its documentation, and IDLE
     36 
     37 Each of these is discussed in a later section of this document.
     38 
     39 Structure of the Installer
     40 ==========================
     41 
     42 The installer is structured as a 'layout', which consists of a number of
     43 CAB and MSI files and a single EXE.
     44 
     45 The EXE is the main entry point into the installer. It contains the UI
     46 and command-line logic, as well as the ability to locate and optionally
     47 download other parts of the layout.
     48 
     49 Each MSI contains the logic required to install a component or feature
     50 of Python. These MSIs should not be launched directly by users. MSIs can
     51 be embedded into the EXE or automatically downloaded as needed.
     52 
     53 Each CAB contains the files making up a Python installation. CABs are
     54 embedded into their associated MSI and are never seen by users.
     55 
     56 MSIs are only required when the related feature or component is being
     57 installed. When components are not selected for installation, the
     58 associated MSI is not downloaded. This allows the installer to offer
     59 options to install debugging symbols and binaries without increasing
     60 the initial download size by separating them into their own MSIs.
     61 
     62 Building the Installer
     63 ======================
     64 
     65 Before building the installer, download extra build dependencies using
     66 Tools\msi\get_externals.bat. (Note that this is in addition to the
     67 similarly named file in PCbuild.)
     68 
     69 One of the dependencies used in builds is WiX, a toolset that lets developers
     70 create installers for Windows Installer, the Windows installation engine. WiX
     71 has a dependency on the Microsoft .NET Framework Version 3.5 (which may not be
     72 configured on recent versions of Windows, such as Windows 10). If you are
     73 building on a recent Windows version, use the Control Panel (Programs | Programs
     74 and Features | Turn Windows Features on or off) and ensure that the entry
     75 ".NET Framework 3.5 (includes .NET 2.0 and 3.0)" is enabled.
     76 
     77 For testing, the installer should be built with the Tools/msi/build.bat
     78 script:
     79 
     80     build.bat [-x86] [-x64] [--doc] [--test-marker] [--pack]
     81 
     82 This script will build the required configurations of Python and
     83 generate an installer layout in PCbuild/(win32|amd64)/en-us.
     84 
     85 Specify -x86 and/or -x64 to build for each platform. If neither is
     86 specified, both platforms will be built. Currently, both the debug and
     87 release versions of Python are required for the installer.
     88 
     89 Specify --doc to build the documentation (.chm) file. If the file is not
     90 available, it will simply be excluded from the installer. Ensure
     91 %PYTHON% and %SPHINXBUILD% are set when passing this option. You may
     92 also set %HTMLHELP% to the Html Help Compiler (hhc.exe), or put HHC on
     93 your PATH or in externals/.
     94 
     95 Specify --test-marker to build an installer that works side-by-side with
     96 an official Python release. All registry keys and install locations will
     97 include an extra marker to avoid overwriting files. This marker is
     98 currently an 'x' prefix, but may change at any time.
     99 
    100 Specify --pack to build an installer that does not require all MSIs to
    101 be available alongside. This takes longer, but is easier to share.
    102 
    103 
    104 For an official release, the installer should be built with the
    105 Tools/msi/buildrelease.bat script:
    106 
    107     set PYTHON=<path to Python 2.7 or 3.4>
    108     set SPHINXBUILD=<path to sphinx-build.exe>
    109     set PATH=<path to Mercurial (hg.exe)>;
    110              <path to HTML Help Compiler (hhc.exe)>;%PATH%
    111 
    112     buildrelease.bat [-x86] [-x64] [-D] [-B]
    113         [-o <output directory>] [-c <certificate name>]
    114 
    115 Specify -x86 and/or -x64 to build for each platform. If neither is
    116 specified, both platforms will be built. Currently, both the debug and
    117 release versions of Python are required for the installer.
    118 
    119 Specify -D to skip rebuilding the documentation. The documentation is
    120 required for a release and the build will fail if it is not available.
    121 
    122 Specify -B to skip rebuilding Python. This is useful to only rebuild the
    123 installer layout after a previous call to buildrelease.bat.
    124 
    125 Specify -o to set an output directory. The installer layouts will be
    126 copied to platform-specific subdirectories of this path.
    127 
    128 Specify -c to choose a code-signing certificate to be used for all the
    129 signable binaries in Python as well as each file making up the
    130 installer. Official releases of Python must be signed.
    131 
    132 Ensure %PYTHON% and %SPHINXBUILD% are set when passing this option. You
    133 may also set %HTMLHELP% to the Html Help Compiler (hhc.exe), or put HHC
    134 on your PATH or in externals/. You will also need Mercurial (hg.exe) on
    135 your PATH.
    136 
    137 If WiX is not found on your system, it will be automatically downloaded
    138 and extracted to the externals/ directory.
    139 
    140 To manually build layouts of the installer, build one of the projects in
    141 the bundle folder.
    142 
    143     msbuild bundle\snapshot.wixproj
    144     msbuild bundle\releaseweb.wixproj
    145     msbuild bundle\releaselocal.wixproj
    146     msbuild bundle\full.wixproj
    147 
    148 snapshot.wixproj produces a test installer versioned based on the date.
    149 
    150 releaseweb.wixproj produces a release installer that does not embed any
    151 of the layout.
    152 
    153 releaselocal.wixproj produces a release installer that embeds the files
    154 required for a default installation.
    155 
    156 full.wixproj produces a test installer that embeds the entire layout.
    157 
    158 The following properties may be passed when building these projects.
    159 
    160   /p:BuildForRelease=(true|false)
    161     When true, adds extra verification to ensure a complete installer is
    162     produced. For example, binutils is required when building for a release
    163     to generate MinGW-compatible libraries, and the build will be aborted if
    164     this fails. Defaults to false.
    165 
    166   /p:ReleaseUri=(any URI)
    167     Used to generate unique IDs for the installers to allow side-by-side
    168     installation. Forks of Python can use the same installer infrastructure
    169     by providing a unique URI for this property. It does not need to be an
    170     active internet address. Defaults to $(ComputerName).
    171 
    172     Official releases use http://www.python.org/(architecture name)
    173 
    174   /p:DownloadUrlBase=(any URI)
    175     Specifies the base of a URL where missing parts of the installer layout
    176     can be downloaded from. The build version and architecture will be
    177     appended to create the full address. If omitted, missing components will
    178     not be automatically downloaded.
    179 
    180   /p:DownloadUrl=(any URI)
    181     Specifies the full URL where missing parts of the installer layout can
    182     be downloaded from. Should normally include '{2}', which will be
    183     substituted for the filename. If omitted, missing components will not be
    184     automatically downloaded. If specified, this value overrides
    185     DownloadUrlBase.
    186 
    187   /p:SigningCertificate=(certificate name)
    188     Specifies the certificate to sign the installer layout with. If omitted,
    189     the layout will not be signed.
    190 
    191   /p:RebuildAll=(true|false)
    192     When true, rebuilds all of the MSIs making up the layout. Defaults to
    193     true.
    194 
    195 Uploading the Installer
    196 =======================
    197 
    198 For official releases, the uploadrelease.bat script should be used.
    199 
    200 You will require PuTTY so that plink.exe and pscp.exe can be used, and your
    201 SSH key can be activated in pageant.exe. PuTTY should be either on your path
    202 or in %ProgramFiles(x86)%\PuTTY.
    203 
    204 To include signatures for each uploaded file, you will need gpg2.exe on your
    205 path or have run get_externals.bat. You may also need to "gpg2.exe --import"
    206 your key before running the upload script.
    207 
    208     uploadrelease.bat --host <host> --user <username> [--dry-run] [--no-gpg]
    209 
    210 The host is the URL to the server. This can be provided by the Release
    211 Manager. You should be able to SSH to this address.
    212 
    213 The username is your own username, which you have permission to SSH into
    214 the server containing downloads.
    215 
    216 Use --dry-run to display the generated upload commands without executing
    217 them. Signatures for each file will be generated but not uploaded unless
    218 --no-gpg is also passed.
    219 
    220 Use --no-gpg to suppress signature generation and upload.
    221 
    222 The default target directory (which appears in uploadrelease.proj) is
    223 correct for official Python releases, but may be overridden with
    224 --target <path> for other purposes. This path should generally not include
    225 any version specifier, as that will be added automatically.
    226 
    227 Modifying the Installer
    228 =======================
    229 
    230 The code for the installer is divided into three main groups: packages,
    231 the bundle and the bootstrap application.
    232 
    233 Packages
    234 --------
    235 
    236 Packages appear as subdirectories of Tools/msi (other than the bundle/
    237 directory). The project file is a .wixproj and the build output is a
    238 single MSI. Packages are built with the WiX Toolset. Some project files
    239 share source files and use preprocessor directives to enable particular
    240 features. These are typically used to keep the sources close when the
    241 files are related, but produce multiple independent packages.
    242 
    243 A package is the smallest element that may be independently installed or
    244 uninstalled (as used in this installer). For example, the test suite has
    245 its own package, as users can choose to add or remove it after the
    246 initial installation.
    247 
    248 All the files installed by a single package should be related, though
    249 some packages may not install any files. For example, the pip package
    250 executes the ensurepip package, but does not add or remove any of its
    251 own files. (It is represented as a package because of its
    252 installed/uninstalled nature, as opposed to the "precompile standard
    253 library" option, for example.) Dependencies between packages are handled
    254 by the bundle, but packages should detect when dependencies are missing
    255 and raise an error.
    256 
    257 Packages that include a lot of files may use an InstallFiles element in
    258 the .wixproj file to generate sources. See lib/lib.wixproj for an
    259 example, and msi.targets and csv_to_wxs.py for the implementation. This
    260 element is also responsible for generating the code for cleaning up and
    261 removing __pycache__ folders in any directory containing .py files.
    262 
    263 All packages are built with the Tools/msi/common.wxs file, and so any
    264 directory or property in this file may be referenced. Of particular
    265 interest:
    266 
    267   REGISTRYKEY (property)
    268     The registry key for the current installation.
    269 
    270   InstallDirectory (directory)
    271     The root install directory for the current installation. Subdirectories
    272     are also specified in this file (DLLs, Lib, etc.)
    273 
    274   MenuDir (directory)
    275     The Start Menu folder for the current installation.
    276 
    277   UpgradeTable (property)
    278     Every package should reference this property to include upgrade
    279     information.
    280 
    281   OptionalFeature (Component)
    282     Packages that may be enabled or disabled should reference this component
    283     and have an OPTIONAL_FEATURES entry in the bootstrap application to
    284     properly handle Modify and Upgrade.
    285 
    286 The .wxl_template file is specially handled by the build system for this
    287 project to perform {{substitutions}} as defined in msi.targets. They
    288 should be included in projects as <WxlTemplate> items, where .wxl files
    289 are normally included as <EmbeddedResource> items.
    290 
    291 Bundle
    292 ------
    293 
    294 The bundle is compiled to the main EXE entry point that for most users
    295 will represent the Python installer. It is built from Tools/msi/bundle
    296 with packages references in Tools/msi/bundle/packagegroups.
    297 
    298 Build logic for the bundle is in bundle.targets, but should be invoked
    299 through one of the .wixproj files as described in Building the
    300 Installer.
    301 
    302 The UI is separated between Default.thm (UI layout), Default.wxl
    303 (strings), bundle.wxs (properties) and the bootstrap application.
    304 Bundle.wxs also contains the chain, which is the list of packages to
    305 install and the order they should be installed in. These refer to named
    306 package groups in bundle/packagegroups.
    307 
    308 Each package group specifies one or more packages to install. Most
    309 packages require two separate entries to support both per-user and
    310 all-users installations. Because these reuse the same package, it does
    311 not increase the overall size of the package.
    312 
    313 Package groups refer to payload groups, which allow better control over
    314 embedding and downloading files than the default settings. Whether files
    315 are embedded and where they are downloaded from depends on settings
    316 created by the project files.
    317 
    318 Package references can include install conditions that determine when to
    319 install the package. When a package is a dependency for others, the
    320 condition should be crafted to ensure it is installed.
    321 
    322 MSI packages are installed or uninstalled based on their current state
    323 and the install condition. This makes them most suitable for features
    324 that are clearly present or absent from the user's machine.
    325 
    326 EXE packages are executed based on a customisable condition that can be
    327 omitted. This makes them suitable for pre- or post-install tasks that
    328 need to run regardless of whether features have been added or removed.
    329 
    330 Bootstrap Application
    331 ---------------------
    332 
    333 The bootstrap application is a C++ application that controls the UI and
    334 installation. While it does not directly compile into the main EXE of
    335 the installer, it forms the main active component. Most of the
    336 installation functionality is provided by WiX, and so the bootstrap
    337 application is predominantly responsible for the code behind the UI that
    338 is defined in the Default.thm file. The bootstrap application code is in
    339 bundle/bootstrap and is built automatically when building the bundle.
    340 
    341 Installation Layout
    342 ===================
    343 
    344 There are two installation layouts for Python on Windows, with the only
    345 differences being supporting files. A layout is selected implicitly
    346 based on whether the install is for all users of the machine or just for
    347 the user performing the installation.
    348 
    349 The default installation location when installing for all users is
    350 "%ProgramFiles%\Python3X" for the 64-bit interpreter and
    351 "%ProgramFiles(x86)%\Python3X-32" for the 32-bit interpreter. (Note that
    352 the latter path is equivalent to "%ProgramFiles%\Python3X-32" when
    353 running a 32-bit version of Windows.) This location requires
    354 administrative privileges to install or later modify the installation.
    355 
    356 The default installation location when installing for the current user
    357 is "%LocalAppData%\Programs\Python\Python3X" for the 64-bit interpreter
    358 and "%LocalAppData%\Programs\Python\Python3X-32" for the 32-bit
    359 interpreter. Only the current user can access this location. This
    360 provides a suitable level of protection against malicious modification
    361 of Python's files.
    362 
    363 (Default installation locations are set in Tools\msi\bundle\bundle.wxs.)
    364 
    365 Within this install directory is the following approximate layout:
    366 
    367 .\python[w].exe The core executable files
    368 .\DLLs          Stdlib extensions (*.pyd) and dependencies
    369 .\Doc           Documentation (*.chm)
    370 .\include       Development headers (*.h)
    371 .\Lib           Standard library
    372 .\Lib\test      Test suite
    373 .\libs          Development libraries (*.lib)
    374 .\Scripts       Launcher scripts (*.exe, *.py)
    375 .\tcl           Tcl dependencies (*.dll, *.tcl and others)
    376 .\Tools         Tool scripts (*.py)
    377 
    378 When installed for all users, the following files are installed to
    379 either "%SystemRoot%\System32" or "%SystemRoot%\SysWOW64" as
    380 appropriate. For the current user, they are installed in the Python
    381 install directory.
    382 
    383 .\python3x.dll      The core interpreter
    384 .\python3.dll       The stable ABI reference
    385 
    386 When installed for all users, the following files are installed to
    387 "%SystemRoot%" (typically "C:\Windows") to ensure they are always
    388 available on PATH. (See Launching Python below.) For the current user,
    389 they are installed in "%LocalAppData%\Programs\Python\PyLauncher".
    390 
    391 .\py[w].exe         PEP 397 launcher
    392 
    393 System Settings
    394 ===============
    395 
    396 On installation, registry keys are created so that other applications
    397 can locate and identify installations of Python. The locations of these
    398 keys vary based on the install type.
    399 
    400 For 64-bit interpreters installed for all users, the root key is:
    401     HKEY_LOCAL_MACHINE\Software\Python\PythonCore\3.X
    402 
    403 For 32-bit interpreters installed for all users on a 64-bit operating
    404 system, the root key is:
    405     HKEY_LOCAL_MACHINE\Software\Wow6432Node\Python\PythonCore\3.X-32
    406 
    407 For 32-bit interpreters installed for all users on a 32-bit operating
    408 system, the root key is:
    409     HKEY_LOCAL_MACHINE\Software\Python\PythonCore\3.X-32
    410 
    411 For 64-bit interpreters installed for the current user:
    412     HKEY_CURRENT_USER\Software\Python\PythonCore\3.X
    413 
    414 For 32-bit interpreters installed for the current user:
    415     HKEY_CURRENT_USER\Software\Python\PythonCore\3.X-32
    416 
    417 When the core Python executables are installed, a key "InstallPath" is
    418 created within the root key with its default value set to the
    419 executable's install directory. A value named "ExecutablePath" is added
    420 with the full path to the main Python interpreter, and a key
    421 "InstallGroup" is created with its default value set to the product
    422 name "Python 3.X".
    423 
    424 When the Python standard library is installed, a key "PythonPath" is
    425 created within the root key with its default value set to the full path
    426 to the Lib folder followed by the path to the DLLs folder, separated by
    427 a semicolon.
    428 
    429 When the documentation is installed, a key "Help" is created within the
    430 root key, with a subkey "Main Python Documentation" with its default
    431 value set to the full path to the installed CHM file.
    432 
    433 
    434 The py.exe launcher is installed as part of a regular Python install,
    435 but using a separate mechanism that allows it to more easily span
    436 versions of Python. As a result, it has different root keys for its
    437 registry entries:
    438 
    439 When installed for all users on a 64-bit operating system, the
    440 launcher's root key is:
    441     HKEY_LOCAL_MACHINE\Software\Wow6432Node\Python\Launcher
    442 
    443 When installed for all users on a 32-bit operating system, the
    444 launcher's root key is:
    445     HKEY_LOCAL_MACHINE\Software\Python\Launcher
    446 
    447 When installed for the current user:
    448     HKEY_CURRENT_USER\Software\Python\Launcher
    449 
    450 When the launcher is installed, a key "InstallPath" is created within
    451 its root key with its default value set to the launcher's install
    452 directory. File associations are also created for .py, .pyw, .pyc and
    453 .pyo files.
    454 
    455 Launching Python
    456 ================
    457 
    458 When a feature offering user entry points in the Start Menu is
    459 installed, a folder "Python 3.X" is created. Every shortcut should be
    460 created within this folder, and each shortcut should include the version
    461 and platform to allow users to identify the shortcut in a search results
    462 page.
    463 
    464 The core Python executables creates a shortcut "Python 3.X (32-bit)" or
    465 "Python 3.X (64-bit)" depending on the interpreter.
    466 
    467 The documentation creates a shortcut "Python 3.X 32-bit Manuals" or
    468 "Python 3.X 64-bit Manuals". The documentation is identical for all
    469 platforms, but the shortcuts need to be separate to avoid uninstallation
    470 conflicts.
    471 
    472 Installing IDLE creates a shortcut "IDLE (Python 3.X 32-bit)" or "IDLE
    473 (Python 3.X 64-bit)" depending on the interpreter.
    474 
    475 
    476 For users who often launch Python from a Command Prompt, an option is
    477 provided to add the directory containing python.exe to the user or
    478 system PATH variable. If the option is selected, the install directory
    479 and the Scripts directory will be added at the start of the system PATH
    480 for an all users install and the user PATH for a per-user install.
    481 
    482 When the user only has one version of Python installed, this will behave
    483 as expected. However, because Windows searches the system PATH before
    484 the user PATH, users cannot override a system-wide installation of
    485 Python on their PATH. Further, because the installer can only prepend to
    486 the path, later installations of Python will take precedence over
    487 earlier installations, regardless of interpreter version.
    488 
    489 Because it is not possible to automatically create a sensible PATH
    490 configuration, users are recommended to use the py.exe launcher and
    491 manually modify their PATH variable to add Scripts directories in their
    492 preferred order. System-wide installations of Python should consider not
    493 modifying PATH, or using an alternative technology to modify their
    494 users' PATH variables.
    495 
    496 
    497 The py.exe launcher is recommended because it uses a consistent and
    498 sensible search order for Python installations. User installations are
    499 preferred over system-wide installs, and later versions are preferred
    500 regardless of installation order (with the exception that py.exe
    501 currently prefers 2.x versions over 3.x versions without the -3 command
    502 line argument).
    503 
    504 For both 32-bit and 64-bit interpreters, the 32-bit version of the
    505 launcher is installed. This ensures that the search order is always
    506 consistent (as the 64-bit launcher is subtly different from the 32-bit
    507 launcher) and also avoids the need to install it multiple times. Future
    508 versions of Python will upgrade the launcher in-place, using Windows
    509 Installer's upgrade functionality to avoid conflicts with earlier
    510 installed versions.
    511 
    512 When installed, file associations are created for .py, .pyc and .pyo
    513 files to launch with py.exe and .pyw files to launch with pyw.exe. This
    514 makes Python files respect shebang lines by default and also avoids
    515 conflicts between multiple Python installations.
    516 
    517 
    518 Repair, Modify and Uninstall
    519 ============================
    520 
    521 After installation, Python may be modified, repaired or uninstalled by
    522 running the original EXE again or via the Programs and Features applet
    523 (formerly known as Add or Remove Programs).
    524 
    525 Modifications allow features to be added or removed. The install
    526 directory and kind (all users/single user) cannot be modified. Because
    527 Windows Installer caches installation packages, removing features will
    528 not require internet access unless the package cache has been corrupted
    529 or deleted. Adding features that were not previously installed and are
    530 not embedded or otherwise available will require internet access.
    531 
    532 Repairing will rerun the installation for all currently installed
    533 features, restoring files and registry keys that have been modified or
    534 removed. This operation generally will not redownload any files unless
    535 the cached packages have been corrupted or deleted.
    536 
    537 Removing Python will clean up all the files and registry keys that were
    538 created by the installer, as well as __pycache__ folders that are
    539 explicitly handled by the installer. Python packages installed later
    540 using a tool like pip will not be removed. Some components may be
    541 installed by other installers and these will not be removed if another
    542 product has a dependency on them.
    543 
    544