text: #!/usr/bin/env python
  # -*- coding: utf-8 -*-
  from __future__ import absolute_import
  from __future__ import print_function
  from __future__ import unicode_literals
  
  import os
  import subprocess
  import sys
  from os.path import abspath
  from os.path import dirname
  from os.path import exists
  from os.path import join
  
  base_path = dirname(dirname(abspath(__file__)))
  
  
  def check_call(args):
      print("+", *args)
      subprocess.check_call(args)
  
  
  def exec_in_env():
      env_path = join(base_path, ".tox", "bootstrap")
      if sys.platform == "win32":
          bin_path = join(env_path, "Scripts")
      else:
          bin_path = join(env_path, "bin")
      if not exists(env_path):
          import subprocess
  
          print("Making bootstrap env in: {0} ...".format(env_path))
          try:
              check_call([sys.executable, "-m", "venv", env_path])
          except subprocess.CalledProcessError:
              try:
                  check_call([sys.executable, "-m", "virtualenv", env_path])
              except subprocess.CalledProcessError:
                  check_call(["virtualenv", env_path])
          print("Installing `jinja2` into bootstrap environment...")
          check_call([join(bin_path, "pip"), "install", "jinja2", "tox"])
      python_executable = join(bin_path, "python")
      if not os.path.exists(python_executable):
          python_executable += '.exe'
  
      print("Re-executing with: {0}".format(python_executable))
      print("+ exec", python_executable, __file__, "--no-env")
      os.execv(python_executable, [python_executable, __file__, "--no-env"])
  
  
  def main():
      import jinja2
  
      print("Project path: {0}".format(base_path))
  
      jinja = jinja2.Environment(
          loader=jinja2.FileSystemLoader(join(base_path, "ci", "templates")),
          trim_blocks=True,
          lstrip_blocks=True,
          keep_trailing_newline=True
      )
  
      tox_environments = [
          line.strip()
          # 'tox' need not be installed globally, but must be importable
          # by the Python that is running this script.
          # This uses sys.executable the same way that the call in
          # cookiecutter-pylibrary/hooks/post_gen_project.py
          # invokes this bootstrap.py itself.
          for line in subprocess.check_output([sys.executable, '-m', 'tox', '--listenvs'], universal_newlines=True).splitlines()
      ]
      tox_environments = [line for line in tox_environments if line.startswith('py')]
  
      for name in os.listdir(join("ci", "templates")):
          with open(join(base_path, name), "w") as fh:
              fh.write(jinja.get_template(name).render(tox_environments=tox_environments))
          print("Wrote {}".format(name))
      print("DONE.")
  
  
  if __name__ == "__main__":
      args = sys.argv[1:]
      if args == ["--no-env"]:
          main()
      elif not args:
          exec_in_env()
      else:
          print("Unexpected arguments {0}".format(args), file=sys.stderr)
          sys.exit(1)
  