From a5a7e61fb2be63a3b6d96c40445270fc41364501 Mon Sep 17 00:00:00 2001 From: Joost van Griethuysen Date: Tue, 11 Feb 2020 17:03:08 +0100 Subject: [PATCH 1/3] TESTING: Remove testing for Python 2.7 --- .circleci/config.yml | 41 +++++++---------------------------------- .travis.yml | 7 ------- appveyor.yml | 8 +------- 3 files changed, 8 insertions(+), 48 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4474ac2a..2b69d2dd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -21,37 +21,21 @@ jobs: command: echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > /etc/ssh/ssh_config - checkout - run: - # Jupyter datascience notebook does not support python 2 anymore, install it manually. - # See also https://github.com/jupyter/docker-stacks/issues/432 - # Next, install python 2 kernel globally, so it can be found from the root - name: Install Python 2 Kernel + name: Install pyradiomics in Python 3 command: | - conda create -n python2 python=2 ipykernel - pip install kernda --no-cache - $CONDA_DIR/envs/python2/bin/python -m ipykernel install - kernda -o -y /usr/local/share/jupyter/kernels/python2/kernel.json - pip uninstall kernda -y - - run: - name: Install pyradiomics in Python 2 and 3 - command: | - source activate python2 - python -m pip install --no-cache-dir -r requirements.txt - python -m pip install --no-cache-dir -r requirements-dev.txt - python setup.py install source activate root python -m pip install --no-cache-dir -r requirements.txt python -m pip install --no-cache-dir -r requirements-dev.txt python setup.py install - run: - name: test notebooks in python 2 and 3 + name: test notebooks in python 3 command: | - jupyter nbconvert --ExecutePreprocessor.kernel_name=python2 --ExecutePreprocessor.timeout=-1 --to notebook --output-dir /tmp --execute notebooks/helloRadiomics.ipynb notebooks/helloFeatureClass.ipynb notebooks/PyRadiomicsExample.ipynb jupyter nbconvert --ExecutePreprocessor.kernel_name=python3 --ExecutePreprocessor.timeout=-1 --to notebook --output-dir /tmp --execute notebooks/helloRadiomics.ipynb notebooks/helloFeatureClass.ipynb notebooks/PyRadiomicsExample.ipynb - build-2.7: &build_template + build-3.5: &build_template working_directory: /pyradiomics docker: - - image: circleci/python:2.7-jessie + - image: circleci/python:3.5-jessie user: root steps: - checkout @@ -75,12 +59,6 @@ jobs: root: . paths: dist - build-3.5: - <<: *build_template - docker: - - image: circleci/python:3.5-jessie - user: root - build-3.6: <<: *build_template docker: @@ -163,7 +141,6 @@ jobs: name: Build Conda packages command: | mkdir /conda-bld - conda build ./conda --python=2.7 --croot /conda-bld conda build ./conda --python=3.5 --croot /conda-bld conda build ./conda --python=3.6 --croot /conda-bld conda build ./conda --python=3.7 --croot /conda-bld @@ -176,26 +153,22 @@ workflows: version: 2 build_and_deploy: jobs: - - build-2.7: &build_job_template + - build-3.5: &build_job_template filters: tags: only: - /^v?[0-9]+(\.[0-9]+)*(rc[0-9]+)?/ - - build-3.5: - <<: *build_job_template - build-3.6: <<: *build_job_template + - build-3.7: + <<: *build_job_template - test-notebooks: requires: - - build-2.7 - build-3.5 - build-3.6 - build-3.7 - - build-3.7: - <<: *build_job_template - deploy: &deploy_template requires: - - build-2.7 - build-3.5 - build-3.6 - build-3.7 diff --git a/.travis.yml b/.travis.yml index 41d0b63e..3ce719e4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,12 +5,6 @@ language: python matrix: include: - - os: osx - language: generic - env: - - PYTHON_VERSION=2.7.12 - - PYTHON_SHORT_VERSION=2.7 - - os: osx language: generic env: @@ -34,7 +28,6 @@ cache: - $HOME/.pyenv/versions/3.7.2 - $HOME/.pyenv/versions/3.6.5 - $HOME/.pyenv/versions/3.5.5 - - $HOME/.pyenv/versions/2.7.12 - $HOME/downloads before_install: diff --git a/appveyor.yml b/appveyor.yml index 2ccd1420..39c7c1ab 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,13 +3,7 @@ version: "0.0.1.{build}" environment: matrix: - # Visual Studio (Python 2 & 3, 64 bit) - - - PYTHON_DIR: "C:\\Python27-x64" - PYTHON_VERSION: "2.7.x" - PYTHON_SHORT_VERSION: "2.7" - PYTHON_ARCH: "64" - BLOCK: "0" + # Visual Studio (Python 3, 64 bit) - PYTHON_DIR: "C:\\Python35-x64" PYTHON_VERSION: "3.5.x" From 0101187ba91a5a20bd5d7bbab6ad822558332eea Mon Sep 17 00:00:00 2001 From: Joost van Griethuysen Date: Tue, 11 Feb 2020 17:16:04 +0100 Subject: [PATCH 2/3] DEPRECATE: Remove deprecated functions - Remove commandlinebatch.py - Remove CalculateFeatures() from radiomics.base.RadiomicsBase --- radiomics/base.py | 7 +- radiomics/scripts/commandlinebatch.py | 171 -------------------------- setup.py | 3 +- 3 files changed, 2 insertions(+), 179 deletions(-) delete mode 100644 radiomics/scripts/commandlinebatch.py diff --git a/radiomics/base.py b/radiomics/base.py index 050133c3..d8edd9fd 100644 --- a/radiomics/base.py +++ b/radiomics/base.py @@ -6,7 +6,7 @@ import SimpleITK as sitk import six -from radiomics import deprecated, getProgressReporter, imageoperations +from radiomics import getProgressReporter, imageoperations class RadiomicsFeaturesBase(object): @@ -186,11 +186,6 @@ def execute(self): return self.featureValues - @deprecated - def calculateFeatures(self): - self.logger.warning('calculateFeatures() is deprecated, use execute() instead.') - self.execute() - def _calculateVoxels(self): initValue = self.settings.get('initValue', 0) voxelBatch = self.settings.get('voxelBatch', -1) diff --git a/radiomics/scripts/commandlinebatch.py b/radiomics/scripts/commandlinebatch.py deleted file mode 100644 index eea0e1e3..00000000 --- a/radiomics/scripts/commandlinebatch.py +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env python - -import argparse -import collections -import csv -import json -import logging -import os.path - -import numpy - -import radiomics -from radiomics import featureextractor - -parser = argparse.ArgumentParser(usage='%(prog)s In Out [Options]') -parser.add_argument('inFile', metavar='In', type=argparse.FileType('r'), - help='CSV file containing combinations of image and mask. First row should contain the headers, ' - 'where "Image" and "Mask" must be present and identify the image and mask locations, ' - 'respectively. All columns present in CSV file are copied to the output, this enables ' - 'specification of additional identifiers, such as patient ID, Study ID and Reader.') -parser.add_argument('outFile', metavar='Out', type=argparse.FileType('w'), - help='File to write results to') -parser.add_argument('--format', '-f', choices=['csv', 'json'], default='csv', help='Format for the output. ' - 'Default is "csv": one row of feature names, followed by one row of feature values for each ' - 'image-mask combination. For "json": Features are written in a JSON format dictionary ' - '"{name:value}", one line per image-mask combination') -parser.add_argument('--skip-nans', action='store_true', - help='Add this argument to skip returning features that have an invalid result (NaN)') -parser.add_argument('--param', '-p', metavar='FILE', type=str, default=None, - help='Parameter file containing the settings to be used in extraction') -parser.add_argument('--label', '-l', metavar='N', default=None, type=int, - help='Value of label in mask to use for feature extraction') -parser.add_argument('--logging-level', metavar='LEVEL', - choices=['NOTSET', 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], - default='WARNING', help='Set capture level for logging') -parser.add_argument('--log-file', metavar='FILE', type=argparse.FileType('w'), default=None, - help='File to append logger output to') -parser.add_argument('--verbosity', '-v', action='store', nargs='?', default=3, const=4, type=int, choices=range(0, 6), - help='Regulate output to stderr. By default [3], level WARNING and up are printed. By specifying ' - 'this argument without a value, level INFO [4] is assumed. A higher value results in more verbose ' - 'output.') -parser.add_argument('--shorten-path', dest='shorten', action='store_true', - help='specify this argument to image and mask path to just the file names') -parser.add_argument('--version', action='version', help='Print version and exit', - version='%(prog)s ' + radiomics.__version__) - - -def main(): - args = parser.parse_args() - - # Initialize Logging - logLevel = getattr(logging, args.logging_level) - rLogger = radiomics.logger - - # Set up optional logging to file - if args.log_file is not None: - rLogger.setLevel(logLevel) - handler = logging.StreamHandler(args.log_file) - handler.setFormatter(logging.Formatter("%(levelname)s:%(name)s: %(message)s")) - rLogger.addHandler(handler) - - # Set verbosity of output (stderr) - verboseLevel = (6 - args.verbosity) * 10 # convert to python logging level - radiomics.setVerbosity(verboseLevel) - - # Initialize logging for script log messages - logger = rLogger.getChild('batch') - - logger.warning("This entry point is deprecated. It's enhanced functionality for batch extraction is now available " - 'in the "pyradiomics" entry point. See "http://pyradiomics.readthedocs.io/en/latest/usage.html" ' - 'for more details.') - - # Load patient list - flists = [] - try: - cr = csv.DictReader(args.inFile, lineterminator='\n') - flists = [row for row in cr] - args.inFile.close() - - # Check if required Image and Mask columns are present - if 'Image' not in cr.fieldnames: - logger.error('Required column "Image" not present in input, unable to extract features...') - exit(-1) - if 'Mask' not in cr.fieldnames: - logger.error('Required column "Mask" not present in input, unable to extract features...') - exit(-1) - except Exception: - logging.error('CSV READ FAILED', exc_info=True) - exit(-1) - - # Initialize extractor - try: - logger.debug("Initializing extractor") - if args.param is not None: - extractor = featureextractor.RadiomicsFeatureExtractor(args.param) - else: - extractor = featureextractor.RadiomicsFeatureExtractor() - except Exception: - logger.error('EXTRACTOR INITIALIZATION FAILED', exc_info=True) - exit(-1) - - # Extract features - logger.info('Extracting features with kwarg settings: %s', str(extractor.settings)) - - headers = None - for idx, entry in enumerate(flists, start=1): - # Check if the required columns have a value, if not, skip them. - if entry['Image'] == '': - logger.error('Missing value in column "Image", cannot process. Skipping patient (%d/%d)', idx, len(flists)) - continue - if entry['Mask'] == '': - logger.error('Missing value in column "Mask", cannot process. Skipping patient (%d/%d)', idx, len(flists)) - continue - - logger.info("(%d/%d) Processing Patient (Image: %s, Mask: %s)", idx, len(flists), entry['Image'], entry['Mask']) - - imageFilepath = entry['Image'] - maskFilepath = entry['Mask'] - - if (imageFilepath is not None) and (maskFilepath is not None): - if not os.path.isabs(imageFilepath): - imageFilepath = os.path.abspath(os.path.join(os.path.dirname(args.inFile.name), imageFilepath)) - logger.debug('Updated relative image filepath to be relative to input CSV: %s', imageFilepath) - if not os.path.isabs(maskFilepath): - maskFilepath = os.path.abspath(os.path.join(os.path.dirname(args.inFile.name), maskFilepath)) - logger.debug('Updated relative mask filepath to be relative to input CSV: %s', maskFilepath) - - featureVector = collections.OrderedDict(entry) - if args.shorten: - featureVector['Image'] = os.path.basename(imageFilepath) - featureVector['Mask'] = os.path.basename(maskFilepath) - - try: - entryLabel = entry.get('Label', None) - if str(entryLabel).isdigit(): - label = int(entryLabel) - else: - label = args.label - - featureVector.update(extractor.execute(imageFilepath, maskFilepath, label)) - - # if specified, skip NaN values - if args.skip_nans: - for key in list(featureVector.keys()): - if isinstance(featureVector[key], float) and numpy.isnan(featureVector[key]): - logger.debug('Feature %s computed NaN, removing from results', key) - del featureVector[key] - - if args.format == 'csv': - writer = csv.writer(args.outFile, lineterminator='\n') - if headers is None: - headers = list(featureVector.keys()) - writer.writerow(headers) - - row = [] - for h in headers: - row.append(featureVector.get(h, "")) - writer.writerow(row) - elif args.format == 'json': - json.dump(featureVector, args.outFile) - args.outFile.write('\n') - except Exception: - logger.error('FEATURE EXTRACTION FAILED', exc_info=True) - - args.outFile.close() - if args.log_file is not None: - args.log_file.close() - - -if __name__ == "__main__": - main() diff --git a/setup.py b/setup.py index 4e905862..d922a42d 100644 --- a/setup.py +++ b/setup.py @@ -86,8 +86,7 @@ def run_tests(self): entry_points={ 'console_scripts': [ - 'pyradiomics=radiomics.scripts.__init__:parse_args', - 'pyradiomicsbatch=radiomics.scripts.commandlinebatch:main' # Deprecated entry point + 'pyradiomics=radiomics.scripts.__init__:parse_args' ]}, description='Radiomics features library for python', From a0c38759a7eb0d1d3f1d3458a13a871e95a259e3 Mon Sep 17 00:00:00 2001 From: Joost van Griethuysen Date: Tue, 11 Feb 2020 17:54:44 +0100 Subject: [PATCH 3/3] Update documentation and CHANGES Preparation for 3.0 release. --- CHANGES.rst | 52 +++++++++++++++++++++++++++-------- README.md | 8 +++--- docs/faq.rst | 17 ++++++------ docs/index.rst | 6 ++--- docs/installation.rst | 63 ++++++++++++++++++++++++------------------- 5 files changed, 92 insertions(+), 54 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index c8466f20..3a9c9ed9 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -2,21 +2,51 @@ Release Notes ============= -.. note:: - **Upcoming changes in 3.0 release** - - - Removal of deprecated code (e.g. ``commandlinebatch.py``, ``calculateFeatures()`` function in feature classes); - deprecated radiomics features are retained. - - End of official python 2.7 support - - - No CI-tests for python 2.7 - - No pre-build binaries for python 2.7 distributed on PyPi and Anaconda Cloud - - Compatibility code using six is retained (allowing local build). - ------------ Next Release ------------ +--------------- +PyRadiomics 3.0 +--------------- + +.. warning:: + As of this release, Python 2.7 testing is removed. Compatibility code such as it is will be left in place, but + future changes will not be checked for backwards compatibility. Moreover, no pre-built binaries for python 2.7 + will be distributed on PyPi or Conda. + Finally, some deprecated code is removed (``commandlinebatch.py`` and ``calculateFeatures()``). + +Bug Fixes +######### + +- Fix broken Conda deployment (`51c5849 `_) +- Fix error in IBSI mapping (labs/pyradiomics-dcm) (`54d6689 `_) +- Fix resampling error when spacing is correct, but sizes are different (`ac7458e `_) +- Fix label channel selection (`54a3782 `_) +- Use local scope of settings, preventing race conditions in parallel extraction (`43578f7 `_) +- Fix resampling for 2D input (`#545 `_) + +Internal API +############ + +- Update C API to use large datatype for index pointers (`#500 `_, + `#501 `_) +- Update docker CLI to use python 3.6.9 and fix bugs to allow integration with pyradiomics-dcm lab (`#527 `_) +- Add option to force path to UNIX style paths, even on windows (`3c0708a `_) +- Removed deprecated code (`fedaa5e `_) + +Testing +####### + +- Remove testing and deployment for python 2.7 (`a5a7e61 `_) + +Documentation +############# + +- Refactor documentation (`#536 `_) +- Fix various typos/wording +- Clarify use of force2D, and add example settings file (`#558 `_) + ----------------- PyRadiomics 2.2.0 ----------------- diff --git a/README.md b/README.md index 2fa420f8..c0d27412 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# pyradiomics v2.2.0 +# pyradiomics v3.0 ## Build Status @@ -76,8 +76,8 @@ The documentation can then be viewed in a browser by opening `PACKAGE_ROOT\build Furthermore, an instruction video is available [here](http://radiomics.io/pyradiomics.html). ### Installation -PyRadiomics is OS independent and compatible with both Python 2.7 and Python 3.4, 3.5 and 3.6. As of version 2.0, -PyRadiomics releases are also made available on PyPi. To install PyRadiomics, ensure you have python +PyRadiomics is OS independent and compatible with Python >= 3.5. Pre-built binaries are available on +PyPi and Conda. To install PyRadiomics, ensure you have python installed and run: `python -m pip install pyradiomics` @@ -158,7 +158,7 @@ This package is covered by the open source [3-clause BSD License](LICENSE.txt). 6Isomics ### Contact -We are happy to help you with any questions. Please contact us on the [Radiomics community section of the 3D Slicer Discourse](https://discourse.slicer.org/c/community/radiomics). +We are happy to help you with any questions. Please contact us on the [Radiomics community section of the 3D Slicer Discourse](https://discourse.slicer.org/c/community/radiomics/23). We welcome contributions to PyRadiomics. Please read the [contributing guidelines](CONTRIBUTING.rst) on how to contribute to PyRadiomics. diff --git a/docs/faq.rst b/docs/faq.rst index 32f81d71..8e07f255 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -363,11 +363,11 @@ Miscellaneous Which python versions is PyRadiomics compatible with? ##################################################### -PyRadiomics is compatible with both python 2 and python 3. However, the automated testing only uses python versions 2.7, -3.5, 3.6 and 3.7 (only 64 bits architecture). Python < 2.6 is not supported. Other python versions may be compatible with -PyRadiomics, but this is not actively tested and therefore not guaranteed to work. In the future, support for python 2.7 -will also be dropped, to compatibility fixes are retained. This means that future releases of PyRadiomics will only have -pre-built wheels for Python versions >= 3.5. +PyRadiomics is compatible with python 3. Python 2 support was dropped in PyRadiomics version 3.0, though compatibility +code was retained. However, the automated testing only uses python versions 3.5, 3.6 and 3.7 (64 bits architecture). +Python < 2.6 is not supported. Other python versions may be compatible with PyRadiomics, but this is not actively tested +and therefore not guaranteed to work. Pre-built wheels are only available for the tested versions of python (3.5, 3.6 +and 3.7) A new version of PyRadiomics is available! Where can I find out what changed? ############################################################################# @@ -390,15 +390,14 @@ I found a bug! Where do I report it? We strive to keep PyRadiomics as bug free as possible by thoroughly testing new additions before including them in the stable version. However, nothing is perfect, and some bugs may therefore exist. Report yours by -`opening an issue `_ on the GitHub or contact us at the -`pyradiomics email list `_. If you want to help in fixing it, we'd -welcome you to open up a `pull request `_ with your suggested fix. +`opening an issue `_ on the GitHub. If you want to help in fixing it, +we'd welcome you to open up a `pull request `_ with your suggested fix. My question is not listed here... ################################# If you have a question that is not listed here, check the -`pyradiomics email list `_ or the +`pyradiomics forum on 3D Slicer discourse `_ or the `issues on GitHub `_. Feel free to post a new question or issue and we'll try to get back to you ASAP. diff --git a/docs/index.rst b/docs/index.rst index 26bc0cee..e5d8e507 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -114,8 +114,8 @@ See also the `requirements file =3.4. As of version 2.0, -PyRadiomics releases are also made available on PyPi. To install PyRadiomics, ensure you have python +PyRadiomics is OS independent and compatible with and Python >=3.5. Pre-built binaries are available on +PyPi and Conda. To install PyRadiomics, ensure you have python installed and run: * ``python -m pip install pyradiomics`` @@ -155,7 +155,7 @@ Developers Contact ------- -We are happy to help you with any questions. Please contact us on the `Radiomics community section of the 3D Slicer Discourse `_. +We are happy to help you with any questions. Please contact us on the `Radiomics community section of the 3D Slicer Discourse `_. We'd welcome your contributions to PyRadiomics. Please read the :ref:`contributing guidelines ` on how to contribute to PyRadiomics. Information on diff --git a/docs/installation.rst b/docs/installation.rst index a54e42fd..3609f2fa 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -14,19 +14,28 @@ There are three ways you can use pyradiomics: 1. Install via pip ------------------ -As of version 2.0.0, PyRadiomics will be available for installation via pip. For the python versions +Pre-built binaries are available on PyPi for installation via pip. For the python versions mentioned below, wheels are automatically generated for each release of PyRadiomics, allowing you to install pyradiomics without having to compile anything. For other python versions, a source distribution is also available, but this requires compiling the C extensions. -* Ensure that you have ``python`` installed on your machine, version 2.7, 3.4, 3.5 or 3.6 (64-bits). +* Ensure that you have ``python`` installed on your machine, version 3.5, 3.6 or 3.7 (64-bits). -* Install PyRadiomics: +* Install PyRadiomics:: - * ``python -m pip install pyradiomics`` + python -m pip install pyradiomics + +-------------------- +2. Install via conda +-------------------- + +Besides pre-built binaries for PyPi, PyRadiomics is also available on conda cloud. +To install PyRadiomics on Conda, run:: + + conda install -c radiomics pyradiomics ---------------------- -2. Install from source +3. Install from source ---------------------- PyRadiomics can also be installed from source code. This allows for the bleeding edge version, but does @@ -35,21 +44,22 @@ of texture matrices and some shape features. * Ensure you have the version control system ``git`` installed on your machine. -* Ensure that you have ``python`` installed on your machine, at least version 2.7 or 3.4 (64-bits). +* Ensure that you have ``python`` installed on your machine, at least version 3.5 (64-bits). + +* Clone the repository:: -* Clone the repository: + git clone git://github.com/Radiomics/pyradiomics - * ``git clone git://github.com/Radiomics/pyradiomics`` +* For unix like systems (MacOSX, linux):: -* For unix like systems (MacOSX, linux): + cd pyradiomics + python -m pip install -r requirements.txt + python setup.py install - * ``cd pyradiomics`` - * ``python -m pip install -r requirements.txt`` - * ``python setup.py install`` + * To use your build for interactive use and development:: - To use your build for interactive use and development: - * ``python setup.py build_ext --inplace`` + python setup.py build_ext --inplace * If you don't have sudo/admin rights on your machine, you need to locally install numpy, nose, tqdm, PyWavelets, SimpleITK (specified in requirements.txt). In a bash shell:: @@ -59,11 +69,11 @@ of texture matrices and some shape features. pip install --user -r requirements.txt export PYTHONPATH=$HOME/.local/lib64/python2.7/site-packages -* For Windows: +* For Windows:: - * ``cd pyradiomics`` - * ``python -m pip install -r requirements.txt`` - * ``python setup.py install`` + cd pyradiomics + python -m pip install -r requirements.txt + python setup.py install * If the installation fails, check out the :ref:`radiomics-faq-label`. If your error is not listed there, contact us by `creating an issue `_ on the PyRadiomics @@ -90,14 +100,14 @@ This approach may be preferred if you are interested in using pyradiomics from t First, you will need to install Docker on your system, if it is not installed already. You can follow the instructions below to do this. Once Docker is installed, you can issue ``docker pull radiomics/pyradiomics:CLI`` command in the shell to download the pyradiomics Docker image. -After that you can invoke pyradiomics tool as follows: +After that you can invoke pyradiomics tool as follows:: - ``docker run radiomics/pyradiomics:CLI --help`` + docker run radiomics/pyradiomics:CLI --help Docker containers cannot directly access the filesystem of the host. In order to pass files as arguments to pyradiomics and to access files that converters create, -an extra step is required to specify which directories will be used for file exchange using the -v argument: +an extra step is required to specify which directories will be used for file exchange using the -v argument:: - ``-v :`` + -v : The argument above will make the ``HOST_DIR`` path available within the container at ``CONTAINER_DIR`` location. The files that will be read or written by the converter run from the docker container should be referred to via the ``CONTAINER_DIR`` path. @@ -121,12 +131,11 @@ Note `the system requirements `_: **IMPORTANT**: You will also need to share the drive you will be using to communicate data to and from Docker image in Docker Settings as shown in the screenshot below. -Most likely you will experience the display of an error message similar to the one shown below: - +Most likely you will experience the display of an error message similar to the one shown below:: - ``C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: \`` - ``C: drive is not shared. Please share it in Docker for Windows Settings.`` - ``See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.`` + C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: + C: drive is not shared. Please share it in Docker for Windows Settings. + See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'. If you have this error, make sure that the drive, where the ``HOST_DIR`` is located, is shared: