1

我习惯于pip将 Python 包安装到我的 Django 项目的虚拟环境中。

当我在本地使用 Divio Docker 项目时,这不起作用。

4

1 回答 1

2

在将 Python 包安装到 Docker 项目中时,您需要注意两件事:

  • 该软件包必须安装在正确的环境中
  • 如果以后要使用已安装的包,则需要以更永久的方式安装

下面的详细信息描述了使用 Divio 项目,但其他 Docker 安装的原理与此类似。

在正确的环境中安装

pip在命令行上使用将 Python 包安装到 Dockerised 项目中,您需要在 Docker 环境pip 内部使用,即在容器内部。

仅仅位于可以访问项目文件的目录中是不够的。在这方面,它类似于使用虚拟环境——您需要激活virtualenv 。(否则,您的软件包将不会安装在虚拟环境中,而是安装在您自己的主机环境中。)

要激活虚拟环境,您需要在其上运行类似source bin/activate的东西。

在 Divioweb容器中安装软件包:

# start a bash prompt inside the project
docker-compose run --rm web bash

# install the package in the usual way
pip install rsa

rsa现在已安装并可使用。

更永久的安装

然而,到目前为止,该包将仅在该特定容器中安装和可用。一旦退出 bash shell,容器就会消失。下次启动web容器时,您将不会在rsa那里找到包。那是因为容器每次都是从它的image启动的。

为了使软件包保持安装状态,您需要将其包含在映像中。

Divio 项目包含一个requirements.in文件,其中列出了将包含在映像中的 Python 包。

添加一个包含rsa到该文件末尾的新行。然后运行:

docker-compose build web

这将重建 Docker 映像。下次您使用 (for example) 启动容器时docker-compose run --rm web bash,它将包含该 Python 包。

Divio 开发人员手册有一些关于使用 pip 的额外指导。)

注意:我是 Divio 团队的成员。这个问题是我们通过我们的支持渠道经常看到的一个问题。

于 2018-10-11T11:50:24.347 回答