Installer scripts#

make_dist script#

Script to create a new distribution. Requires Python 3.7+.

The following options are supported:


Print documentation of this file and of


Install the distribution as a local site-package. If a Pywikibot package is already there, it will be uninstalled first. Clears old dist folders first.


Upload the package to pypi. This cannot be done if the Pywikibot version is a development release. Clears old dist folders first.


Clear old dist folders and leave. Does not create a distribution.


Upgrade pip first; upgrade or install distribution packages build and twine first.


[pwb] make_dist [options]

New in version 7.3.

Changed in version 7.4:

  • updates pip, setuptools, wheel and twine packages first

  • installs pre-releases over stable versions

  • also creates built distribution together with source distribution

  • -upgrade option was added

Changed in version 7.5:

  • clear option was added

  • nodist option was added

Changed in version 8.1: Python 3.7+ required because dataclasses module is used. nodist option was removed, clear option does not create a distribution. local and remote option clears old distributions first.

Changed in version 8.2: Build frontend was changed from setuptools to build. -upgrade option also installs packages if necessary.

class make_dist.SetupBase(local, remote, clear, upgrade)[source]#

Bases: ABC

Setup distribution base class.

New in version 8.0.

Changed in version 8.1: dataclass is used.

  • local (bool) –

  • remote (bool) –

  • clear (bool) –

  • upgrade (bool) –

abstract cleanup()[source]#

Cleanup copied files.

Return type:


clear: bool#

Delete old dist folders.

New in version 7.5.

Return type:


abstract copy_files()[source]#

Copy files.

Return type:


folder: Path#
local: bool#
remote: bool#

Run the installer script.


True if no error occurs, else False

Return type:


upgrade: bool#
class make_dist.SetupPywikibot(*args)[source]#

Bases: SetupBase

Setup for Pywikibot distribution.

New in version 8.0.

Set source and target directories.


Remove all copied files from pywikibot scripts folder.

Return type:


clear: bool#

Copy i18n files to pywikibot.scripts folder.

Pywikibot i18n files are used for some translations. They are copied to the pywikibot scripts folder.

Return type:


folder: Path#
local: bool#
remote: bool#
upgrade: bool#

Handle arguments and print documentation if requested.

Read arguments from sys.argv and adjust it passing sdist to setuptools.setup.


Return whether dist is to be installed locally or to be uploaded

Return type:

tuple[bool, bool, bool, bool]


Script entry point.

Return type:


setup script#

Installer script for Pywikibot framework.

How to create a new distribution:

  • replace the developmental version string in by the corresponding final release

  • create the package with:

    make_dist -remote
  • create a new tag with the version number of the final release

  • synchronize the local tags with the remote repositoy

  • merge current master branch to stable branch

  • push new stable branch to Gerrit and merge it the stable repository

  • prepare the next master release by increasing the version number in and adding developmental identifier

  • upload this patchset to Gerrit and merge it.


Find framework packages.

Return type:



Get a validated pywikibot module version string.

The version number from pywikibot.__metadata__.__version__ is used. with ‘sdist’ option is used to create a new source distribution. In that case the version number is validated: Read tags from git. Verify that the new release is higher than the last repository tag and is not a developmental release.


pywikibot module version string

Return type:



Setup entry point.

Return type:



Read long description.

Combine included restructured text files which must be done before uploading because the source isn’t available after creating the package.

Return type:


entry point#

pwb caller script to invoke the pywikibot.scripts.wrapper script.

New in version 8.0.


Entry point for tests.utils.execute_pwb().


Check that Python is supported.