From b86b63ac415b707bf95d90a10fb27512fb7572e2 Mon Sep 17 00:00:00 2001 From: mhubii Date: Thu, 19 Mar 2020 16:21:20 +0000 Subject: [PATCH 1/5] added setuptools support --- monai/__init__.py | 3 +-- setup.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 setup.py diff --git a/monai/__init__.py b/monai/__init__.py index d101b7d6dc..b2917fa8c9 100644 --- a/monai/__init__.py +++ b/monai/__init__.py @@ -15,8 +15,7 @@ from .utils.module import load_submodules __copyright__ = "(c) 2020 MONAI Consortium" -__version__tuple__ = (0, 0, 1) -__version__ = "%i.%i.%i" % __version__tuple__ +__version__ = "0.0.1" __basedir__ = os.path.dirname(__file__) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000..fd49a2be3b --- /dev/null +++ b/setup.py @@ -0,0 +1,55 @@ +import os +import io +import re +from setuptools import setup, find_packages + +# inspired by https://github.com/pytorch/ignite/blob/master/setup.py +def read(*names, **kwargs): + print(os.path.join(os.path.dirname(__file__), *names)) + with io.open( + os.path.join(os.path.dirname(__file__), *names), + encoding=kwargs.get("encoding", "utf8") + ) as fp: + return fp.read() + +def find_version(*file_paths): + version_file = read(*file_paths) + version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", + version_file, re.M) + if version_match: + return version_match.group(1) + raise RuntimeError("Unable to find version string.") + +readme = read("README.md") +VERSION = find_version("monai", "__init__.py") +requirements = [ + "torch", + "pytorch-ignite", + "numpy", + "pillow", + "coverage", + "nibabel", + "parameterized", + "tensorboard", + "scikit-image", + "scipy" +] + +if __name__ == '__main__': + setup( + # Metadata + name="monai", + version=VERSION, + author="MONAI Core Team", + url="https://github.com/Project-MONAI/MONAI", + author_email="wenqil@nvidia.com", + description="AI Toolkit for Healthcare Imaging", + long_description_content_type="text/markdown", + long_description=readme, + license="Apache License 2.0", + + # Package info + packages=find_packages(exclude=('docs', 'examples', 'tests')), + zip_safe=True, + install_requires=requirements + ) \ No newline at end of file From 37816794b59c2e4226d8f0814b1006b7d559f1af Mon Sep 17 00:00:00 2001 From: mhubii Date: Thu, 19 Mar 2020 16:21:28 +0000 Subject: [PATCH 2/5] updated README --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 3fc9c31f87..e4994ec3fc 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,16 @@ MONAI is a [PyTorch](https://pytorch.org/)-based, [open-source](https://github.c - customizable design for varying user expertise; - multi-GPU data parallelism support. +## Installation +Clone and build this repository from source + +```bash +git clone https://github.com/Project-MONAI/MONAI.git +python setup.py install +``` + +Run some of the examples in [Getting Started](##getting-started) + ## Getting Started Tutorials & examples are located at [monai/examples](https://github.com/Project-MONAI/MONAI/tree/master/examples). From 2b9ab586d82667645542cfe022d4ac58989c220d Mon Sep 17 00:00:00 2001 From: mhubii Date: Thu, 19 Mar 2020 16:27:17 +0000 Subject: [PATCH 3/5] removed relative paths --- examples/classification_3d/densenet_evaluation_array.py | 2 -- examples/classification_3d/densenet_evaluation_dict.py | 2 -- examples/classification_3d/densenet_training_array.py | 2 -- examples/classification_3d/densenet_training_dict.py | 2 -- examples/integrate_to_spleen_program.ipynb | 2 -- examples/multi_gpu_test.ipynb | 3 --- examples/nifti_read_example.ipynb | 2 -- examples/segmentation_3d/unet_evaluation_array.py | 3 --- examples/segmentation_3d/unet_evaluation_dict.py | 3 --- examples/segmentation_3d/unet_training_array.py | 3 --- examples/segmentation_3d/unet_training_dict.py | 3 --- examples/transform_speed.ipynb | 2 -- examples/transforms_demo_2d.ipynb | 2 -- examples/unet_segmentation_3d.ipynb | 3 --- 14 files changed, 34 deletions(-) diff --git a/examples/classification_3d/densenet_evaluation_array.py b/examples/classification_3d/densenet_evaluation_array.py index 9785605aad..ce89ebe309 100644 --- a/examples/classification_3d/densenet_evaluation_array.py +++ b/examples/classification_3d/densenet_evaluation_array.py @@ -16,8 +16,6 @@ from ignite.engine import create_supervised_evaluator, _prepare_batch from torch.utils.data import DataLoader -# assumes the framework is found here, change as necessary -sys.path.append("../..") import monai import monai.transforms.compose as transforms from monai.data.nifti_reader import NiftiDataset diff --git a/examples/classification_3d/densenet_evaluation_dict.py b/examples/classification_3d/densenet_evaluation_dict.py index d2e33cfe5e..7d4a62a4cb 100644 --- a/examples/classification_3d/densenet_evaluation_dict.py +++ b/examples/classification_3d/densenet_evaluation_dict.py @@ -17,8 +17,6 @@ from ignite.engine import create_supervised_evaluator, _prepare_batch from torch.utils.data import DataLoader -# assumes the framework is found here, change as necessary -sys.path.append("../..") from monai.handlers.classification_saver import ClassificationSaver from monai.handlers.checkpoint_loader import CheckpointLoader from monai.handlers.stats_handler import StatsHandler diff --git a/examples/classification_3d/densenet_training_array.py b/examples/classification_3d/densenet_training_array.py index 06950a0d80..e8ef70c59e 100644 --- a/examples/classification_3d/densenet_training_array.py +++ b/examples/classification_3d/densenet_training_array.py @@ -17,8 +17,6 @@ from ignite.handlers import ModelCheckpoint, EarlyStopping from torch.utils.data import DataLoader -# assumes the framework is found here, change as necessary -sys.path.append("../..") import monai import monai.transforms.compose as transforms from monai.data.nifti_reader import NiftiDataset diff --git a/examples/classification_3d/densenet_training_dict.py b/examples/classification_3d/densenet_training_dict.py index 3ed8c1715a..a009c9e3df 100644 --- a/examples/classification_3d/densenet_training_dict.py +++ b/examples/classification_3d/densenet_training_dict.py @@ -17,8 +17,6 @@ from ignite.handlers import ModelCheckpoint, EarlyStopping from torch.utils.data import DataLoader -# assumes the framework is found here, change as necessary -sys.path.append("../..") import monai import monai.transforms.compose as transforms from monai.transforms.composables import \ diff --git a/examples/integrate_to_spleen_program.ipynb b/examples/integrate_to_spleen_program.ipynb index 66f5483f2c..b43cda61b1 100644 --- a/examples/integrate_to_spleen_program.ipynb +++ b/examples/integrate_to_spleen_program.ipynb @@ -67,8 +67,6 @@ "import torch\n", "from torch.utils.data import DataLoader\n", "import matplotlib.pyplot as plt\n", - "# assumes the framework is found here, change as necessary\n", - "sys.path.append(\"..\")\n", "import monai\n", "import monai.transforms.compose as transforms\n", "from monai.transforms.composables import \\\n", diff --git a/examples/multi_gpu_test.ipynb b/examples/multi_gpu_test.ipynb index 98911e12f2..b12437a803 100644 --- a/examples/multi_gpu_test.ipynb +++ b/examples/multi_gpu_test.ipynb @@ -24,9 +24,6 @@ "from ignite.engine.engine import Events\n", "from ignite.handlers import ModelCheckpoint\n", "\n", - "# assumes the framework is found here, change as necessary\n", - "sys.path.append(\"..\")\n", - "\n", "import monai\n", "\n", "\n", diff --git a/examples/nifti_read_example.ipynb b/examples/nifti_read_example.ipynb index 339fac0a19..c83ae70429 100644 --- a/examples/nifti_read_example.ipynb +++ b/examples/nifti_read_example.ipynb @@ -37,8 +37,6 @@ "from torch.utils.data import DataLoader\n", "import monai.transforms.compose as transforms\n", "\n", - "sys.path.append('..') # assumes this is where MONAI is\n", - "\n", "import monai\n", "\n", "from monai.transforms.utils import rescale_array\n", diff --git a/examples/segmentation_3d/unet_evaluation_array.py b/examples/segmentation_3d/unet_evaluation_array.py index f5c039a39e..305a513c1e 100644 --- a/examples/segmentation_3d/unet_evaluation_array.py +++ b/examples/segmentation_3d/unet_evaluation_array.py @@ -20,9 +20,6 @@ from ignite.engine import Engine from torch.utils.data import DataLoader -# assumes the framework is found here, change as necessary -sys.path.append("../..") - from monai import config from monai.handlers.checkpoint_loader import CheckpointLoader from monai.handlers.segmentation_saver import SegmentationSaver diff --git a/examples/segmentation_3d/unet_evaluation_dict.py b/examples/segmentation_3d/unet_evaluation_dict.py index e78abeac3f..5a906af138 100644 --- a/examples/segmentation_3d/unet_evaluation_dict.py +++ b/examples/segmentation_3d/unet_evaluation_dict.py @@ -20,9 +20,6 @@ from ignite.engine import Engine from torch.utils.data import DataLoader -# assumes the framework is found here, change as necessary -sys.path.append("../..") - import monai from monai.data.utils import list_data_collate from monai.utils.sliding_window_inference import sliding_window_inference diff --git a/examples/segmentation_3d/unet_training_array.py b/examples/segmentation_3d/unet_training_array.py index ac224001b5..92e00ec13b 100644 --- a/examples/segmentation_3d/unet_training_array.py +++ b/examples/segmentation_3d/unet_training_array.py @@ -21,9 +21,6 @@ from ignite.handlers import ModelCheckpoint, EarlyStopping from torch.utils.data import DataLoader -# assumes the framework is found here, change as necessary -sys.path.append("../..") - import monai import monai.transforms.compose as transforms diff --git a/examples/segmentation_3d/unet_training_dict.py b/examples/segmentation_3d/unet_training_dict.py index fad530c80f..d68f24a857 100644 --- a/examples/segmentation_3d/unet_training_dict.py +++ b/examples/segmentation_3d/unet_training_dict.py @@ -21,9 +21,6 @@ from ignite.handlers import ModelCheckpoint, EarlyStopping from torch.utils.data import DataLoader -# assumes the framework is found here, change as necessary -sys.path.append("../..") - import monai import monai.transforms.compose as transforms from monai.transforms.composables import \ diff --git a/examples/transform_speed.ipynb b/examples/transform_speed.ipynb index ca9779e5ba..2f4974d527 100644 --- a/examples/transform_speed.ipynb +++ b/examples/transform_speed.ipynb @@ -46,8 +46,6 @@ "except RuntimeError:\n", " pass\n", "\n", - "sys.path.append('..') # assumes this is where MONAI is\n", - "\n", "import monai\n", "from monai.transforms.compose import Compose\n", "from monai.data.nifti_reader import NiftiDataset\n", diff --git a/examples/transforms_demo_2d.ipynb b/examples/transforms_demo_2d.ipynb index ff4b5cea39..9ced3e86b2 100644 --- a/examples/transforms_demo_2d.ipynb +++ b/examples/transforms_demo_2d.ipynb @@ -55,8 +55,6 @@ "import matplotlib.pyplot as plt\n", "from PIL import Image\n", "\n", - "sys.path.append('..') # assumes this is where MONAI is\n", - "\n", "import monai\n", "from monai.transforms import Affine, Rand2DElastic\n", "\n", diff --git a/examples/unet_segmentation_3d.ipynb b/examples/unet_segmentation_3d.ipynb index 80c8e10405..522250f419 100644 --- a/examples/unet_segmentation_3d.ipynb +++ b/examples/unet_segmentation_3d.ipynb @@ -39,9 +39,6 @@ "from ignite.handlers import ModelCheckpoint, EarlyStopping\n", "from torch.utils.data import DataLoader\n", "\n", - "# assumes the framework is found here, change as necessary\n", - "sys.path.append(\"..\")\n", - "\n", "import monai\n", "import monai.transforms.compose as transforms\n", "\n", From 4762c6f3cfa8f3468b6c5c9d83bfe260f1aa8136 Mon Sep 17 00:00:00 2001 From: mhubii Date: Thu, 19 Mar 2020 17:09:12 +0000 Subject: [PATCH 4/5] changed form --- setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index fd49a2be3b..b2db25e4b6 100644 --- a/setup.py +++ b/setup.py @@ -40,9 +40,9 @@ def find_version(*file_paths): # Metadata name="monai", version=VERSION, - author="MONAI Core Team", + author="MONAI Consortium", url="https://github.com/Project-MONAI/MONAI", - author_email="wenqil@nvidia.com", + author_email="monai.miccai2019@gmail.com", description="AI Toolkit for Healthcare Imaging", long_description_content_type="text/markdown", long_description=readme, @@ -52,4 +52,4 @@ def find_version(*file_paths): packages=find_packages(exclude=('docs', 'examples', 'tests')), zip_safe=True, install_requires=requirements - ) \ No newline at end of file + ) From 1e55e23eb8a1c875aa2a322502c34d9bc24c903a Mon Sep 17 00:00:00 2001 From: mhubii Date: Thu, 19 Mar 2020 21:30:18 +0000 Subject: [PATCH 5/5] exchanged raw install by pip install with folder flag --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e4994ec3fc..2ad61b5b61 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Clone and build this repository from source ```bash git clone https://github.com/Project-MONAI/MONAI.git -python setup.py install +pip install -e MONAI/ ``` Run some of the examples in [Getting Started](##getting-started)