【问题标题】:Python docker, should I add new libraries by pip(within image) and create requirements.txt from pip freeze, or editing the requirements.txt manually?Python docker,我应该通过 pip(在图像中)添加新库并从 pip freeze 创建 requirements.txt,还是手动编辑 requirements.txt?
【发布时间】:2022-01-25 16:32:16
【问题描述】:

假设我正在使用 docker 开发一个 python 项目。使用 python 作为基础镜像。现在对于新要求,我需要安装另一个库,例如枕头。 我该如何管理它?

以交互方式运行(python-docker)图像并使用这些命令,pip install枕头,pip freeze > requirements.txt。所以它会更新 requirements.txt 并锁定库版本。

或者我只是在互联网上查看最新/所需的枕头库版本,然后手动将其插入到 requirements.txt 中?试图了解开发人员如何在 docker 上解决此问题。

在 Internet 上找不到任何合适的内容。他们只是在 requirements.txt 中预先准备好了所有需要的东西!

【问题讨论】:

  • 如果您的代码需要一个新库(或新版本),那么您应该使用更新的 requirements.txt 再次构建映像

标签: python docker pip python-imaging-library docker-image


【解决方案1】:

您几乎不应该在容器的交互式 shell 中运行任何类型的“安装”命令。一旦您退出容器,您在此上下文中所做的任何事情都会丢失。同样,从容器中复制文件不方便,验证任何更新的库工作也不方便,等等。

我会设置一个普通的 Python 虚拟环境

python3 -m venv venv
. venv/bin/activate

在那里安装您当前的软件包集,安装新的(或更新的)软件包,并更新需求文件。

pip install -r requirements.txt
pip install pillow
pip freeze > requirements.txt

当您仍在虚拟环境中时,您可以仔细检查一切是否仍然有效,看看到底发生了什么变化。

pytest
git diff requirements.txt
./manage.py runserver

如果这一切正常,那么您就可以使用更新后的图像进行集成测试了。

docker build -t my/image .
docker stop my-app
docker rm my-app
docker run -d --name my-app ... my/image

如果 有效,那么您已经在两个准备提交的地方验证了更改。

git add requirements.txt
git commit -m 'add pillow dependency'

deactivate

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2017-12-30
    • 1970-01-01
    • 2021-11-25
    • 2015-03-25
    • 1970-01-01
    相关资源
    最近更新 更多