| | |
| | |
| | |
| |
|
| | import os |
| | import subprocess |
| | import sys |
| | from setuptools import setup, find_packages |
| | from setuptools.command.install import install |
| | from setuptools.command.develop import develop |
| | from setuptools.command.egg_info import egg_info |
| |
|
| |
|
| | class CustomInstallCommand(install): |
| | """Custom installation command to handle dependencies and CUDA setup""" |
| |
|
| | def run(self): |
| | self.install_dependencies() |
| | install.run(self) |
| |
|
| | def install_dependencies(self): |
| | try: |
| | self._check_requirements() |
| | self._setup_cuda() |
| | self._install_pytorch() |
| | self._install_python_deps() |
| | self._install_diffvg() |
| | except Exception as e: |
| | print(f"\033[91mError during installation: {str(e)}\033[0m") |
| | sys.exit(1) |
| |
|
| | def _check_requirements(self): |
| | """Check system requirements""" |
| | print("\033[92mChecking system requirements...\033[0m") |
| |
|
| | |
| | try: |
| | import conda |
| | except ImportError: |
| | raise RuntimeError("Conda is required. Please install Conda first.") |
| |
|
| | |
| | if subprocess.call(['which', 'git'], stdout=subprocess.PIPE) != 0: |
| | raise RuntimeError("Git is required. Please install Git first.") |
| |
|
| | def _setup_cuda(self): |
| | """Check CUDA availability""" |
| | print("\033[92mChecking CUDA availability...\033[0m") |
| |
|
| | try: |
| | subprocess.check_output(['nvidia-smi']) |
| | self.cuda_available = True |
| | print("CUDA is available") |
| | except: |
| | self.cuda_available = False |
| | print("\033[93mCUDA not available. Installing CPU-only version.\033[0m") |
| |
|
| | def _install_pytorch(self): |
| | """Install PyTorch and related packages""" |
| | print("\033[92mInstalling PyTorch...\033[0m") |
| |
|
| | if self.cuda_available: |
| | pytorch_cmd = [ |
| | 'conda', 'install', '-y', |
| | 'pytorch==1.12.1', |
| | 'torchvision==0.13.1', |
| | 'torchaudio==0.12.1', |
| | 'cudatoolkit=11.3', |
| | '-c', 'pytorch' |
| | ] |
| | else: |
| | pytorch_cmd = [ |
| | 'conda', 'install', '-y', |
| | 'pytorch==1.12.1', |
| | 'torchvision==0.13.1', |
| | 'torchaudio==0.12.1', |
| | 'cpuonly', |
| | '-c', 'pytorch' |
| | ] |
| |
|
| | subprocess.check_call(pytorch_cmd) |
| |
|
| | try: |
| | subprocess.check_call([ |
| | 'conda', 'install', '-y', 'xformers', |
| | '-c', 'xformers' |
| | ]) |
| | except: |
| | print("\033[93mWarning: Failed to install xformers\033[0m") |
| |
|
| | def _install_python_deps(self): |
| | """Install Python dependencies""" |
| | print("\033[92mInstalling Python dependencies...\033[0m") |
| |
|
| | pip_packages = [ |
| | 'hydra-core', 'omegaconf', |
| | 'freetype-py', 'shapely', 'svgutils', |
| | 'opencv-python', 'scikit-image', 'matplotlib', 'visdom', 'wandb', 'beautifulsoup4', |
| | 'triton', 'numba', |
| | 'numpy', 'scipy', 'scikit-fmm', 'einops', 'timm', 'fairscale==0.4.13', |
| | 'accelerate', 'transformers', 'safetensors', 'datasets', |
| | 'easydict', 'scikit-learn', 'pytorch_lightning==2.1.0', 'webdataset', |
| | 'ftfy', 'regex', 'tqdm', |
| | 'diffusers==0.20.2', |
| | 'svgwrite', 'svgpathtools', 'cssutils', 'torch-tools' |
| | ] |
| |
|
| | for package in pip_packages: |
| | try: |
| | subprocess.check_call([sys.executable, '-m', 'pip', 'install', package]) |
| | except: |
| | print(f"\033[93mWarning: Failed to install {package}\033[0m") |
| |
|
| | |
| | try: |
| | subprocess.check_call([ |
| | sys.executable, '-m', 'pip', 'install', |
| | 'git+https://github.com/openai/CLIP.git' |
| | ]) |
| | except: |
| | print("\033[93mWarning: Failed to install CLIP\033[0m") |
| |
|
| | def _install_diffvg(self): |
| | """Install DiffVG""" |
| | print("\033[92mInstalling DiffVG...\033[0m") |
| |
|
| | if not os.path.exists('diffvg'): |
| | subprocess.check_call(['git', 'clone', 'https://github.com/BachiLi/diffvg.git']) |
| |
|
| | os.chdir('diffvg') |
| | subprocess.check_call(['git', 'submodule', 'update', '--init', '--recursive']) |
| |
|
| | |
| | if sys.platform.startswith('linux'): |
| | try: |
| | subprocess.check_call([ |
| | 'sudo', 'apt', 'update' |
| | ]) |
| | subprocess.check_call([ |
| | 'sudo', 'apt', 'install', '-y', |
| | 'cmake', 'ffmpeg', 'build-essential', |
| | 'libjpeg-dev', 'libpng-dev', 'libtiff-dev' |
| | ]) |
| | except: |
| | print("\033[93mWarning: Failed to install system dependencies\033[0m") |
| |
|
| | |
| | subprocess.check_call(['conda', 'install', '-y', '-c', 'anaconda', 'cmake']) |
| | subprocess.check_call(['conda', 'install', '-y', '-c', 'conda-forge', 'ffmpeg']) |
| |
|
| | |
| | subprocess.check_call([sys.executable, 'setup.py', 'install']) |
| | os.chdir('..') |
| |
|
| |
|
| | setup( |
| | name="DiffSketcher", |
| | version="0.1.0", |
| | packages=find_packages(), |
| | install_requires=[ |
| | |
| | ], |
| | python_requires=">=3.7", |
| | cmdclass={ |
| | 'install': CustomInstallCommand, |
| | }, |
| | |
| | author='XiMing Xing', |
| | author_email='ximingxing@gmail.com', |
| | description="DiffSketcher: Text Guided Vector Sketch Synthesis through Latent Diffusion Models", |
| | long_description=open("README.md").read() if os.path.exists("README.md") else "", |
| | long_description_content_type="text/markdown", |
| | keywords="svg, rendering, diffvg", |
| | url='https://github.com/ximinng/DiffSketcher', |
| | classifiers=[ |
| | "Development Status :: 3 - Alpha", |
| | "Intended Audience :: Developers", |
| | "Programming Language :: Python :: 3", |
| | "Programming Language :: Python :: 3.7", |
| | "Programming Language :: Python :: 3.8", |
| | "Programming Language :: Python :: 3.9", |
| | "Programming Language :: Python :: 3.10", |
| | ], |
| | ) |
| |
|