()
| 357 | |
| 358 | |
| 359 | def get_root(): |
| 360 | # we require that all commands are run from the project root, i.e. the |
| 361 | # directory that contains setup.py, setup.cfg, and versioneer.py . |
| 362 | root = os.path.realpath(os.path.abspath(os.getcwd())) |
| 363 | setup_py = os.path.join(root, "setup.py") |
| 364 | versioneer_py = os.path.join(root, "versioneer.py") |
| 365 | if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): |
| 366 | # allow 'python path/to/setup.py COMMAND' |
| 367 | root = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0]))) |
| 368 | setup_py = os.path.join(root, "setup.py") |
| 369 | versioneer_py = os.path.join(root, "versioneer.py") |
| 370 | if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): |
| 371 | err = ("Versioneer was unable to run the project root directory. " |
| 372 | "Versioneer requires setup.py to be executed from " |
| 373 | "its immediate directory (like 'python setup.py COMMAND'), " |
| 374 | "or in a way that lets it use sys.argv[0] to find the root " |
| 375 | "(like 'python path/to/setup.py COMMAND').") |
| 376 | raise VersioneerBadRootError(err) |
| 377 | try: |
| 378 | # Certain runtime workflows (setup.py install/develop in a setuptools |
| 379 | # tree) execute all dependencies in a single python process, so |
| 380 | # "versioneer" may be imported multiple times, and python's shared |
| 381 | # module-import table will cache the first one. So we can't use |
| 382 | # os.path.dirname(__file__), as that will find whichever |
| 383 | # versioneer.py was first imported, even in later projects. |
| 384 | me = os.path.realpath(os.path.abspath(__file__)) |
| 385 | if os.path.splitext(me)[0] != os.path.splitext(versioneer_py)[0]: |
| 386 | print("Warning: build in %s is using versioneer.py from %s" |
| 387 | % (os.path.dirname(me), versioneer_py)) |
| 388 | except NameError: |
| 389 | pass |
| 390 | return root |
| 391 | |
| 392 | |
| 393 | def get_config_from_root(root): |
no test coverage detected