Issue
I have got the following Docker file
FROM jupyter/scipy-notebook
COPY . ./work
RUN pip install -r ./work/requirements.txt
COPY setup.py /work
RUN pip install --upgrade pip && pip install -e .
COPY src /work/src
WORKDIR /work
and the following project structure:
almond_analysis:
notebooks:
data_exploration.ipynb
src:
__init__.py
plots.py
.gitignore
docker-compose.yml
Dockerfile
README.md
requirements.txt
setup.py
Inside the data_exploration.ipynb
notebook, I would like to import the module src
with the command import src as test
. However, despite me having typed RUN pip install -e .
in the Dockerfile, I get the error ModuleNotFoundError: No module named 'src'
. When I do to my container though, inside the work
directory, and run pip install -e .
the error goes away. I tried adding CMD pip install -e .
at the end of the Dockerfile without success. I read also what was suggested in this post (more specifically to add the lines RUN apt-get update
and
RUN apt-get install -y --no-install-recommends
but without success.
My setup.py
file looks like this:
from setuptools import find_packages, setup
import sys
import os
sys.path.insert(0, os.path.abspath( os.path.dirname(__file__)))
requirements_path="requirements.txt"
with open(requirements_path) as requirements_file:
requirements = requirements_file.read().splitlines()
setup(
name="almond_analysis",
version="0.0.1",
description = "Almond analysis",
long_description="Analysing yield with Python."
author= "George N",
packages=find_packages(),
install_requires=requirements,
classifiers=[
"Programming Language :: Python :: 3"
],
python_requires =">= 3.0.*",
)
Does someone have an idea on how to make the ModuleNotFoundError
go away?
Solution
Mount your code under the work
folder, then you don't need to install anything, or really need a Dockerfile unless you have other dependencies.
On host, create folder for notebooks...
notebooks/src/plots.py
def foobar():
print('Hello from plots')
In compose, mount it under the working directory /home/jovyan/work
notebook:
image: jupyter/scipy-notebook
...
volumes:
- ./notebooks:/home/jovyan/work
Load up the Jupyter environment, and create a notebook in the work folder, and then import the module.
from src import plots
plots.foobar() # Hello from plots
This is the same workflow you'd do on your host if you weren't using Docker or Jupyter, so neither of those are really the problem.
Answered By - OneCricketeer
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.