FROM python:3.10-slim # Set environment variable to ensure extension suffix is correct ENV PYTHONPATH=/home/user/app:$PYTHONPATH WORKDIR /home/user/app # Install system dependencies RUN apt-get update && apt-get install -y \ build-essential \ cmake \ python3-dev \ libeigen3-dev \ python3-pybind11 \ pkg-config \ && rm -rf /var/lib/apt/lists/* # Copy requirements and install Python dependencies COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copy C++ source and app COPY cubic_cpp.cpp app.py ./ # Use a more robust compilation approach RUN python3 -c "import numpy; import pybind11; import sys; print(f'Python executable: {sys.executable}, Python version: {sys.version}')" && \ EXT_SUFFIX=$(python3-config --extension-suffix) && \ echo "Extension suffix: ${EXT_SUFFIX}" && \ g++ -O3 -shared -std=c++11 -fPIC \ $(python3-config --includes) \ -I$(python3 -c "import pybind11; print(pybind11.get_include())") \ -I$(python3 -c "import numpy; print(numpy.get_include())") \ cubic_cpp.cpp \ -o cubic_cpp${EXT_SUFFIX} && \ # Copy to multiple possible locations cp cubic_cpp${EXT_SUFFIX} /usr/local/lib/python3.10/site-packages/ && \ # List all created files ls -la /home/user/app && \ ls -la /usr/local/lib/python3.10/site-packages/ | grep cubic && \ # Verify the module can be imported python3 -c "import sys; print(sys.path); import cubic_cpp; print('Successfully imported cubic_cpp:', cubic_cpp.__file__)" # Update app.py to add additional path checks RUN sed -i '1s/^/import os, sys\n\ # Add current directory to path\n\ module_paths = [os.getcwd(), "\/home\/user\/app", "\/home\/user\/a"]\n\ for path in module_paths:\n\ if path not in sys.path:\n\ sys.path.insert(0, path)\n\ if os.path.exists(path):\n\ print(f"Path exists: {path}")\n\ files = [f for f in os.listdir(path) if "cubic_cpp" in f]\n\ if files:\n\ print(f"Found module files in {path}: {files}")\n\n/' app.py # Run the application CMD ["streamlit", "run", "app.py"]