diff --git a/build_pip_package.py b/build_pip_package.py new file mode 100644 index 000000000..7e7bc5c8f --- /dev/null +++ b/build_pip_package.py @@ -0,0 +1,77 @@ +import os +import shutil +import subprocess +import sys +import tempfile + +def is_nightly(): + return os.environ.get("IS_NIGHTLY") == "nightly" + +def abspath(path): + return os.path.abspath(path) + +def main(output_dir=None): + if output_dir is None: + output_dir = "/tmp/tensorflow_text_pkg" + os.makedirs(output_dir, exist_ok=True) + output_dir = abspath(output_dir) + + print(f"=== Destination directory: {output_dir}") + print(f"=== Current directory: {os.getcwd()}") + + # Source directories/files in your repo (relative to repo root) + src_tensorflow_text = os.path.join("tensorflow_text") + src_setup_py = os.path.join("oss_scripts", "pip_package", "setup.nightly.py" if is_nightly() else "setup.py") + src_manifest = os.path.join("oss_scripts", "pip_package", "MANIFEST.in") + src_license = os.path.join("oss_scripts", "pip_package", "LICENSE") + + # Check if source exists + if not os.path.isdir(src_tensorflow_text): + print(f"Error: directory '{src_tensorflow_text}' not found.", file=sys.stderr) + sys.exit(1) + for f in [src_setup_py, src_manifest, src_license]: + if not os.path.isfile(f): + print(f"Error: file '{f}' not found.", file=sys.stderr) + sys.exit(1) + + temp_dir = tempfile.mkdtemp() + print(f"=== Using tmpdir {temp_dir}") + + # Copy tensorflow_text directory + dest_tf_text = os.path.join(temp_dir, "tensorflow_text") + shutil.copytree(src_tensorflow_text, dest_tf_text) + + # Copy setup.py or setup.nightly.py + shutil.copy(src_setup_py, temp_dir) + setup_script = os.path.basename(src_setup_py) + + # Copy MANIFEST.in and LICENSE + shutil.copy(src_manifest, temp_dir) + shutil.copy(src_license, temp_dir) + + # Run setup.py bdist_wheel --universal + old_cwd = os.getcwd() + os.chdir(temp_dir) + try: + if shutil.which('python3'): + python_cmd = 'python3' + elif shutil.which('python'): + python_cmd = 'python' + else: + print("Python not found in PATH.", file=sys.stderr) + sys.exit(1) + + print(python_cmd, setup_script, "bdist_wheel", "--universal") + subprocess.run([python_cmd, setup_script, "bdist_wheel", "--universal"], check=True) + # Copy generated wheel(s) to output directory + dist_dir = os.path.join(temp_dir, "dist") + for filename in os.listdir(dist_dir): + if filename.endswith(".whl"): + shutil.copy(os.path.join(dist_dir, filename), output_dir) + finally: + os.chdir(old_cwd) + shutil.rmtree(temp_dir) + +if __name__ == "__main__": + output_dir_arg = sys.argv[1] if len(sys.argv) > 1 else None + main(output_dir_arg) diff --git a/oss_scripts/pip_package/setup.nightly.py b/oss_scripts/pip_package/setup.nightly.py index 1f4949329..426065a52 100644 --- a/oss_scripts/pip_package/setup.nightly.py +++ b/oss_scripts/pip_package/setup.nightly.py @@ -44,6 +44,7 @@ from setuptools import setup from setuptools.command.install import install from setuptools.dist import Distribution +from setuptools.command.build import build project_name = 'tensorflow-text-nightly' project_version = 'REPLACE_ME' @@ -70,6 +71,12 @@ def finalize_options(self): self.install_lib = os.path.join(self.install_lib, self.extra_dirs) +class BuildToBuildSetuptools(build): + def initialize_options(self): + super().initialize_options() + self.build_base = 'build_setuptools' + + DOCLINES = __doc__.split('\n') setup( @@ -84,7 +91,7 @@ def finalize_options(self): packages=find_packages(), include_package_data=True, zip_safe=False, - cmdclass={'install': InstallPlatlib}, + cmdclass={'install': InstallPlatlib, 'build': BuildToBuildSetuptools}, distclass=BinaryDistribution, install_requires=[ ], diff --git a/oss_scripts/pip_package/setup.py b/oss_scripts/pip_package/setup.py index 4b7422c37..9c607a149 100644 --- a/oss_scripts/pip_package/setup.py +++ b/oss_scripts/pip_package/setup.py @@ -44,6 +44,7 @@ from setuptools import setup from setuptools.command.install import install from setuptools.dist import Distribution +from setuptools.command.build import build project_name = 'tensorflow-text' project_version = '2.18.0' @@ -70,6 +71,12 @@ def finalize_options(self): self.install_lib = os.path.join(self.install_lib, self.extra_dirs) +class BuildToBuildSetuptools(build): + def initialize_options(self): + super().initialize_options() + self.build_base = 'build_setuptools' + + DOCLINES = __doc__.split('\n') setup( @@ -84,7 +91,7 @@ def finalize_options(self): packages=find_packages(), include_package_data=True, zip_safe=False, - cmdclass={'install': InstallPlatlib}, + cmdclass={'install': InstallPlatlib, 'build': BuildToBuildSetuptools}, distclass=BinaryDistribution, install_requires=[ (