Migration to PyScaffold¶
Migrating your existing project to PyScaffold is in most cases quite easy and requires
only a few steps. We assume your project resides in the Git repository my_project
and includes a package directory my_package with your Python modules.
Since you surely don’t want to lose your Git history, we will just deploy a new scaffold in the same repository and move as well as change some files. But before you start, please make that your working tree is not dirty, i.e. all changes are committed and all important files are under version control.
Let’s start:
Change into the parent folder of
my_projectand type:putup my_project --force --no-skeleton -p my_package
in order to deploy the new project structure in your repository.
Now change into
my_projectand move your old package folder intosrcwith:git mv my_package/* src/my_package/
Use the same technique if your project has a test folder other than
testsor a documentation folder other thandocs.Use
git statusto check for untracked files and add them withgit add.Eventually, use
git difftoolto check all overwritten files for changes that need to be transferred. Most important is that all configuration that you may have done insetup.pyby passing parameters tosetup(...)need to be moved tosetup.cfg. You will figure that out quite easily by putting your oldsetup.pyand the newsetup.cfgtemplate side by side. Checkout the documentation of setuptools for more information about this conversion. In most cases you will not need to make changes to the newsetup.pyfile provided by PyScaffold. The only exceptions are if your project uses compiled resources, e.g. Cython, or if you need to specifyentry_points.In order to check that everything works, run
python setup.py installandpython setup.py sdist. If those two commands don’t work, checksetup.cfg,setup.pyas well as your package undersrcagain. Where all modules moved correctly? Is there maybe some__init__.pyfile missing? After these basic commands, try also to runpython setup.py docsandpython setup.py testto check that Sphinx and PyTest runs correctly.