Skip to content

Commit

Permalink
Remove dependency on PyScaffold during builds
Browse files Browse the repository at this point in the history
As discussed in pyscaffold#256, after pytest-runner was deprecated and removed,
the only strong reason for having PyScaffold required during builds is
to use setuptools_scm. Docs can easily be generated via Makefile
(already created by default) or tox/nox (the new tox template already
contains a task for the docs).

A way of removing this dependency is by injecting setuptools_scm
directly on the `setup.py` template. In the future something similar can
be done for `pyproject.toml` (when it is generated by default).

This change is an attempt of doing that. As a direct consequence, we
also remove PyScaffold as a build-time dependency of itself, which makes
things easier.
  • Loading branch information
abravalheri committed Jul 15, 2020
1 parent 8c3e1fa commit 8f796f0
Show file tree
Hide file tree
Showing 28 changed files with 70 additions and 3,764 deletions.
39 changes: 8 additions & 31 deletions setup.cfg
Expand Up @@ -36,7 +36,14 @@ python_requires = >=3.6
include_package_data = True
package_dir =
=src
install_requires = setuptools>=38.3
setup_requires =
setuptools_scm>=4.1.2,<5.0
wheel>=0.34.2,<1.0
install_requires =
appdirs>=1.4.4,<2.0
configupdater>=1.0.1,<2.0
setuptools_scm>=4.1.2,<5.0
setuptools>=38.3

[options.packages.find]
where = src
Expand Down Expand Up @@ -83,31 +90,6 @@ pyscaffold.cli =
travis = pyscaffold.extensions.travis:Travis
gitlab = pyscaffold.extensions.gitlab_ci:GitLab
cirrus = pyscaffold.extensions.cirrus:Cirrus
setuptools.file_finders =
setuptools_scm = pyscaffold.contrib.setuptools_scm.integration:find_files
setuptools_scm.parse_scm =
.hg = pyscaffold.contrib.setuptools_scm.hg:parse
.git = pyscaffold.contrib.setuptools_scm.git:parse
setuptools_scm.parse_scm_fallback =
.hg_archival.txt = pyscaffold.contrib.setuptools_scm.hg:parse_archival
PKG-INFO = pyscaffold.contrib.setuptools_scm.hacks:parse_pkginfo
pip-egg-info = pyscaffold.contrib.setuptools_scm.hacks:parse_pip_egg_info
setuptools_scm.files_command =
.hg = pyscaffold.contrib.setuptools_scm.file_finder_hg:hg_find_files
.git = pyscaffold.contrib.setuptools_scm.file_finder_git:git_find_files
setuptools_scm.version_scheme =
guess-next-dev = pyscaffold.contrib.setuptools_scm.version:guess_next_dev_version
post-release = pyscaffold.contrib.setuptools_scm.version:postrelease_version
python-simplified-semver = setuptools_scm.version:simplified_semver_version
setuptools_scm.local_scheme =
node-and-date = pyscaffold.contrib.setuptools_scm.version:get_local_node_and_date
node-and-timestamp = pyscaffold.contrib.setuptools_scm.version:get_local_node_and_timestamp
dirty-tag = pyscaffold.contrib.setuptools_scm.version:get_local_dirty_tag

[test]
# py.test options when running `python setup.py test`
addopts = --verbose
extras = True

[tool:pytest]
# Options for py.test:
Expand Down Expand Up @@ -137,11 +119,6 @@ log_cli_level = CRITICAL
[aliases]
dists = sdist bdist_wheel

[build_sphinx]
# Options for Sphinx build
source_dir = docs
build_dir = build/sphinx

[devpi:upload]
# Options for the devpi: PyPI server and packaging tool
# VCS export must be deactivated since we are using setuptools-scm
Expand Down
62 changes: 8 additions & 54 deletions setup.py
@@ -1,62 +1,16 @@
# -*- coding: utf-8 -*-
"""
Setup file for PyScaffold.
Important note: Since PyScaffold is self-using and depends on
setuptools-scm, it is important to run:
`python setup.py egg_info --egg-base .`
after a fresh checkout. This will generate some critically needed data.
"""
import inspect
import os
"""Setup file for PyScaffold."""
import sys

from pkg_resources import VersionConflict, require
from setuptools import setup

__location__ = os.path.join(
os.getcwd(), os.path.dirname(inspect.getfile(inspect.currentframe()))
)


def bootstrap_cfg():
"""Allow PyScaffold to be used to package itself.
Usually, running ``python setup.py egg_info --egg-base .`` first is a good
idea.
"""
src_dir = os.path.join(__location__, "src")
egg_info_dir = os.path.join(__location__, "PyScaffold.egg-info")
has_entrypoints = os.path.isdir(egg_info_dir)
import pkg_resources

sys.path.insert(0, src_dir)
pkg_resources.working_set.add_entry(src_dir)
from pyscaffold.contrib.setuptools_scm import get_version
from pyscaffold.contrib.setuptools_scm.git import parse as parse_git
from pyscaffold.contrib.setuptools_scm.hacks import parse_pkginfo
from pyscaffold.integration import local_version2str, version2str
from pyscaffold.utils import check_setuptools_version

check_setuptools_version()

def parse(root):
try:
return parse_pkginfo(root)
except IOError:
return parse_git(root)

config = dict(version_scheme=version2str, local_scheme=local_version2str,)

if has_entrypoints:
return dict(use_pyscaffold=True)
else:
return dict(version=get_version(root=__location__, parse=parse, **config))


def setup_package():
"""Call setuptools-provided `setup` using PyScaffold to bootstrap itself"""
setup(**bootstrap_cfg())
try:
require("setuptools>=38.3")
except VersionConflict:
print("Error: version of setuptools is too old (<38.3)!")
sys.exit(1)


if __name__ == "__main__":
setup_package()
setup(use_scm_version={"version_scheme": "post-release"})
70 changes: 0 additions & 70 deletions src/pyscaffold/contrib/__init__.py

This file was deleted.

0 comments on commit 8f796f0

Please sign in to comment.