text: import codecs
  import os
  import re
  
  from setuptools import find_packages, setup
  
  
  ###############################################################################
  
  NAME = "environ_config"
  KEYWORDS = ["app", "config", "env", "cfg"]
  META_PATH = os.path.join("src", "environ", "__init__.py")
  CLASSIFIERS = [
      "Development Status :: 4 - Beta",
      "Intended Audience :: Developers",
      "Natural Language :: English",
      "License :: OSI Approved :: MIT License",
      "Operating System :: OS Independent",
      "Programming Language :: Python",
      "Programming Language :: Python :: 2",
      "Programming Language :: Python :: 2.7",
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3.5",
      "Programming Language :: Python :: 3.6",
      "Programming Language :: Python :: Implementation :: CPython",
      "Programming Language :: Python :: Implementation :: PyPy",
      "Topic :: Software Development :: Libraries :: Python Modules",
  ]
  INSTALL_REQUIRES = ["attrs>=17.4.0"]
  EXTRAS_REQUIRE = {"tests": ["pytest", "coverage"]}
  EXTRAS_REQUIRE["dev"] = EXTRAS_REQUIRE["tests"]
  
  ###############################################################################
  
  HERE = os.path.abspath(os.path.dirname(__file__))
  
  
  def read(*parts):
      """Build an absolute path from *parts* and and return the contents of the
      resulting file.
  
      Assume UTF-8 encoding.
      """
      with codecs.open(os.path.join(HERE, *parts), "rb", "utf-8") as f:
          return f.read()
  
  
  try:
      PACKAGES
  except NameError:
      PACKAGES = find_packages(where="src")
  try:
      META_PATH
  except NameError:
      META_PATH = os.path.join(HERE, "src", NAME, "__init__.py")
  finally:
      META_FILE = read(META_PATH)
  
  
  def find_meta(meta):
      """Extract __*meta*__ from META_FILE."""
      meta_match = re.search(
          r"^__{meta}__ = ['\"]([^'\"]*)['\"]".format(meta=meta), META_FILE, re.M
      )
      if meta_match:
          return meta_match.group(1)
      raise RuntimeError("Unable to find __{meta}__ string.".format(meta=meta))
  
  
  VERSION = find_meta("version")
  URI = find_meta("uri")
  LONG = (
      read("README.rst")
      + "\n\n"
      + "Release Information\n"
      + "===================\n\n"
      + re.search(
          "(\\d+.\\d.\\d \\(.*?\\)\n.*?)(\n\n\n----\n)", read("CHANGELOG.rst"), re.S
      ).group(1)
      + "\n\n`Full changelog "
      + "<{uri}en/stable/changelog.html>`_.\n\n".format(uri=URI)
      + read("AUTHORS.rst")
  )
  
  
  if __name__ == "__main__":
      setup(
          name=NAME,
          description=find_meta("description"),
          license=find_meta("license"),
          url=URI,
          version=VERSION,
          author=find_meta("author"),
          author_email=find_meta("email"),
          maintainer=find_meta("author"),
          maintainer_email=find_meta("email"),
          keywords=KEYWORDS,
          long_description=LONG,
          packages=PACKAGES,
          package_dir={"": "src"},
          zip_safe=False,
          classifiers=CLASSIFIERS,
          install_requires=INSTALL_REQUIRES,
          extras_require=EXTRAS_REQUIRE,
      )
  