如何在Docker镜像构建中安装私有Python包

时间:2017-10-23 17:48:33

标签: python docker dockerfile

我的目标是停靠python 3.6 Web应用程序。 在我的工作中,我开发了我的Web应用程序正在使用的私有python包(' VmwareProviderBL')。

构建我的docker镜像工作完美,但是当我尝试运行它时,我收到一条错误,说我的私有Python包没有找到。

我的Dockerfile

# Use an official Python runtime as a parent image
FROM python:3.6-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run WebController.py when the container launches
CMD ["python", "WebApi/WebController.py"]

尝试运行图像时出现错误

Traceback (most recent call last):
  File "WebApi/WebController.py", line 3, in <module>
    from VmwareProviderBL import SnapshotBL, MachineBL, Utils
ModuleNotFoundError: No module named 'VmwareProviderBL'

我的包层次结构

--VmwareVirtualMachineProvider
  --WebApi
  --VmwareProviderBL
  --requirements
  --Dockerfile

任何想法? 我知道我需要以某种方式将此软件包添加到我的Dockerfile,没有在网上找到任何示例。

1 个答案:

答案 0 :(得分:2)

当你import一个模块时,Python查看(a)内置路径(sys.path),(b)PYTHONPATH变量中的位置,以及(c)in包含您正在运行的脚本的目录。

您正在为模块安装要求pip install -r requirements.txt),但您永远不会安装VmwareProviderBL模块本身。这意味着它不会在上面的(a)中提供。您正在运行的脚本(WebApi/WebController.py)与VmwareProviderBL模块位于同一目录中,因此排除了(c)。

解决此问题的最佳方法是在项目中包含setup.py文件,这样您就可以pip install .安装需求和模块本身。

您还可以修改PYTHONPATH环境变量以包含包含VmwareProviderBL模块的目录。例如,添加到Dockerfile:

ENV PYTHONPATH=/app