build_pip_package.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. """Builds a pip package suitable for redistribution.
  2. Adapted from tensorflow/tools/pip_package/build_pip_package.sh. This might have
  3. to change if Bazel changes how it modifies paths.
  4. """
  5. from __future__ import absolute_import
  6. from __future__ import division
  7. from __future__ import print_function
  8. import argparse
  9. import glob
  10. import os
  11. import shutil
  12. import subprocess
  13. import sys
  14. import tempfile
  15. import dragnn
  16. import tensorflow
  17. def main():
  18. cmd_args = argparse.ArgumentParser()
  19. cmd_args.add_argument("--include-tensorflow", action="store_true")
  20. cmd_args.add_argument("--output-dir", required=True)
  21. args = cmd_args.parse_args()
  22. if not os.path.isdir(args.output_dir):
  23. raise EnvironmentError(
  24. "Output directory {} doesn't exist".format(args.output_dir))
  25. elif not args.output_dir.startswith("/"):
  26. raise EnvironmentError("Please pass an absolute path to --output-dir.")
  27. tmp_packaging = tempfile.mkdtemp()
  28. runfiles, = (path for path in sys.path
  29. if path.endswith("build_pip_package.runfiles"))
  30. # Use the dragnn and tensorflow modules to resolve specific paths in the
  31. # runfiles directory. Current Bazel puts dragnn in a __main__ subdirectory,
  32. # for example.
  33. lib_path = os.path.abspath(dragnn.__file__)
  34. if runfiles not in lib_path:
  35. raise EnvironmentError("WARNING: Unexpected PYTHONPATH set by Bazel :(")
  36. base_dir = os.path.dirname(os.path.dirname(lib_path))
  37. tensorflow_dir = os.path.dirname(tensorflow.__file__)
  38. if runfiles not in tensorflow_dir:
  39. raise EnvironmentError("WARNING: Unexpected tf PYTHONPATH set by Bazel :(")
  40. # Copy the files.
  41. subprocess.check_call([
  42. "cp", "-r",
  43. "--no-preserve=all", os.path.join(base_dir, "dragnn"), os.path.join(
  44. base_dir, "syntaxnet"), tmp_packaging
  45. ])
  46. if args.include_tensorflow:
  47. subprocess.check_call(
  48. ["cp", "-r", "--no-preserve=all", tensorflow_dir, tmp_packaging])
  49. shutil.copy(
  50. os.path.join(base_dir, "dragnn/tools/oss_setup.py"),
  51. os.path.join(tmp_packaging, "setup.py"))
  52. subprocess.check_output(
  53. ["python", "setup.py", "bdist_wheel"], cwd=tmp_packaging)
  54. wheel, = glob.glob("{}/*.whl".format(os.path.join(tmp_packaging, "dist")))
  55. shutil.move(wheel, args.output_dir)
  56. print(
  57. "Wrote {}".format(os.path.join(args.output_dir, os.path.basename(wheel))))
  58. if __name__ == "__main__":
  59. main()