python中的部分依赖管理

时间:2019-05-10 14:44:51

标签: python docker tensorflow pipenv python-poetry

我正在管理一个相当大的python项目,该项目具有很多依赖关系,并且打算在TensorFlow docker container中运行。定义要在生产环境中安装哪些依赖项的一种常用方法是通过PipenvPoetry之类的工具生成的锁定文件。创建此类锁定文件时,通常会指定 all python依赖项,以确保包之间没有冲突。但是由于TensorFlow docker容器预装了TensorFlow及其所有依赖项,所以我真的很想将那些软件包从我的锁定文件中排除,以避免重复安装。但是,我仍然希望我的依赖项管理工具在解决锁定文件的依赖项时考虑到某个版本的TensorFlow的存在。

是否有一种方法可以生成用于解决环境中预装软件包的锁定文件,而不将其包含在锁定文件中?

1 个答案:

答案 0 :(得分:1)

如果要将软件包安装到TensorFlow Docker映像中,则TensorFlow依赖项已经被映像名称和标记“锁定”,例如tensorflow/tensorflow:2.0.0。因此,请在Pipfile中指定您的 other Python依赖项。

例如,您的Dockerfile可以包含:

FROM tensorflow/tensorflow:2.0.0-py3

RUN pip3 install pipenv
COPY Pipfile Pipfile.lock /yourproject
WORKDIR /yourproject

RUN pipenv --three --site-packages
RUN pipenv install 

那么您就有了TensorFlow和所有其他依赖项:

$ docker build . -t yourproject && docker run -it yourproject bash
# build info not shown
root@b04fc204d239:/yourproject# pipenv run python -c "import tensorflow; print(tensorflow.__version__)"
Loading .env environment variables…
2.0.0