如何向 docker-compose 项目 (DJANGO) 的 Pipfile 添加额外的 python 包?
How to add an additional python package to the Pipfile of a docker-compose project (DJANGO)?
大家好,希望你们过得很好。我想通过在以正确的方式设置项目时我是一个真正的新手来开始这个问题。现在我正在和一个朋友一起开发 Django 应用程序,他已经有更多的 Web 开发经验,他已经用 Docker-compose 设置了所有东西,也就是说,我们有 Django 应用程序的容器,MySQL、Celery、RabbitMQ等
现在,我在我们项目的后端工作,需要将一个新包添加到应用程序容器具有的包列表中:Smart-Open。问题是,我不知道该怎么做。我在 Windows 上,并使用 Git Bash 启动 docker-compose 容器。我尝试的是打开 Web 应用程序容器的 bash 并尝试从那里 pipenv 安装模块,但它非常慢,这使得 Pipfile 更新超时:
$ winpty docker exec -it whs_webapp_1 bash
root@96caa176d252:/app/my_app_name# pipenv install smart_open[s3]
Creating a virtualenv for this project…
Using /usr/local/bin/python3.9 (3.9.6) to create virtualenv…
⠋Running virtualenv with interpreter /usr/local/bin/python3.9
Using base prefix '/usr/local'
/usr/lib/python3/dist-packages/virtualenv.py:1090: DeprecationWarning: the imp m
import imp
New python executable in /root/.local/share/virtualenvs/my_app-NMSbRsZM/bi
Also creating executable in /root/.local/share/virtualenvs/my_app-NMSbRsZM
Installing setuptools, pkg_resources, pip, wheel...done.
Virtualenv location: /root/.local/share/virtualenvs/my_app-NMSbRsZM
Installing smart_open[s3]…
Collecting smart_open[s3]
Using cached smart_open-5.1.0-py3-none-any.whl (57 kB)
Collecting boto3
Downloading boto3-1.18.10-py3-none-any.whl (131 kB)
Collecting botocore<1.22.0,>=1.21.10
Downloading botocore-1.21.10-py3-none-any.whl (7.8 MB)
Collecting s3transfer<0.6.0,>=0.5.0
Downloading s3transfer-0.5.0-py3-none-any.whl (79 kB)
Collecting jmespath<1.0.0,>=0.7.1
Using cached jmespath-0.10.0-py2.py3-none-any.whl (24 kB)
Collecting python-dateutil<3.0.0,>=2.1
Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Collecting urllib3<1.27,>=1.25.4
Downloading urllib3-1.26.6-py2.py3-none-any.whl (138 kB)
Collecting six>=1.5
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, urllib3, python-dateutil, jmespath, botocore
Successfully installed boto3-1.18.10 botocore-1.21.10 jmespath-0.10.0 python-dat
Adding smart_open[s3] to Pipfile's [packages]…
Pipfile.lock (acbafc) out of date, updating to (9b92f3)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
items())[0][1]
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/resolver.py", lin
return {ireq: self.repository.get_hashes(ireq) for ireq in ireqs}
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/resolver.py", lin
return {ireq: self.repository.get_hashes(ireq) for ireq in ireqs}
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
return {
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
self._get_file_hash(candidate.location)
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
for chunk in iter(lambda: fp.read(8096), b""):
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
for chunk in iter(lambda: fp.read(8096), b""):
File "/usr/lib/python3/dist-packages/pipenv/vendor/pip9/_vendor/requests/packa
flush_decoder = True
File "/usr/local/lib/python3.9/contextlib.py", line 135, in __exit__
self.gen.throw(type, value, traceback)
File "/usr/lib/python3/dist-packages/pipenv/vendor/pip9/_vendor/requests/packa
raise ReadTimeoutError(self._pool, None, 'Read timed out.')
pip9._vendor.requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnect
此命令 运行 持续了大约两个小时,直到发生超时。谁能向我解释我究竟如何正确添加这个新包?我可以分享我们的 docker 配置,但我不确定哪些可能有用。基本上,向 pipfile
添加附加包并相应更新 pipfile.lock
的正确方法是什么?
提前感谢您提供的任何帮助。我在网上搜索过,但大多数指南似乎都无法与我们的配置进行比较,所以我很困惑。
您的项目目录是否包含 docker-compose.yml、Dockerfile 和 requirements.txt 文件?如果是这样,那么以下步骤可能会有所帮助。
打开你的requirements.txt。您应该会看到此处列出的所有 python 项目依赖项。例如,它最初可能看起来像这样:
Django==3.1.5
djangorestframework==3.12.2
添加 smart-open 作为要求,这样您的 requirements.txt 看起来像:
Django==3.1.5
djangorestframework==3.12.2
smart-open
现在,为了用这个新包更新您的映像,您需要重建映像。这通常是这样完成的:
docker-compose up --build
注意:上述命令将重新创建原始图像,但安装了 smart-open,然后将使用该图像启动一个名为 whs_webapp_1 的容器。
要确认软件包已安装,您可以 bash 进入容器,然后通过 运行 以下命令打开 python 交互式终端:
docker exec -it whs_webapp_1 bash
python (or python3)
并测试您的包是否可以导入。
大家好,希望你们过得很好。我想通过在以正确的方式设置项目时我是一个真正的新手来开始这个问题。现在我正在和一个朋友一起开发 Django 应用程序,他已经有更多的 Web 开发经验,他已经用 Docker-compose 设置了所有东西,也就是说,我们有 Django 应用程序的容器,MySQL、Celery、RabbitMQ等
现在,我在我们项目的后端工作,需要将一个新包添加到应用程序容器具有的包列表中:Smart-Open。问题是,我不知道该怎么做。我在 Windows 上,并使用 Git Bash 启动 docker-compose 容器。我尝试的是打开 Web 应用程序容器的 bash 并尝试从那里 pipenv 安装模块,但它非常慢,这使得 Pipfile 更新超时:
$ winpty docker exec -it whs_webapp_1 bash
root@96caa176d252:/app/my_app_name# pipenv install smart_open[s3]
Creating a virtualenv for this project…
Using /usr/local/bin/python3.9 (3.9.6) to create virtualenv…
⠋Running virtualenv with interpreter /usr/local/bin/python3.9
Using base prefix '/usr/local'
/usr/lib/python3/dist-packages/virtualenv.py:1090: DeprecationWarning: the imp m
import imp
New python executable in /root/.local/share/virtualenvs/my_app-NMSbRsZM/bi
Also creating executable in /root/.local/share/virtualenvs/my_app-NMSbRsZM
Installing setuptools, pkg_resources, pip, wheel...done.
Virtualenv location: /root/.local/share/virtualenvs/my_app-NMSbRsZM
Installing smart_open[s3]…
Collecting smart_open[s3]
Using cached smart_open-5.1.0-py3-none-any.whl (57 kB)
Collecting boto3
Downloading boto3-1.18.10-py3-none-any.whl (131 kB)
Collecting botocore<1.22.0,>=1.21.10
Downloading botocore-1.21.10-py3-none-any.whl (7.8 MB)
Collecting s3transfer<0.6.0,>=0.5.0
Downloading s3transfer-0.5.0-py3-none-any.whl (79 kB)
Collecting jmespath<1.0.0,>=0.7.1
Using cached jmespath-0.10.0-py2.py3-none-any.whl (24 kB)
Collecting python-dateutil<3.0.0,>=2.1
Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Collecting urllib3<1.27,>=1.25.4
Downloading urllib3-1.26.6-py2.py3-none-any.whl (138 kB)
Collecting six>=1.5
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, urllib3, python-dateutil, jmespath, botocore
Successfully installed boto3-1.18.10 botocore-1.21.10 jmespath-0.10.0 python-dat
Adding smart_open[s3] to Pipfile's [packages]…
Pipfile.lock (acbafc) out of date, updating to (9b92f3)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
items())[0][1]
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/resolver.py", lin
return {ireq: self.repository.get_hashes(ireq) for ireq in ireqs}
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/resolver.py", lin
return {ireq: self.repository.get_hashes(ireq) for ireq in ireqs}
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
return {
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
self._get_file_hash(candidate.location)
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
for chunk in iter(lambda: fp.read(8096), b""):
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
for chunk in iter(lambda: fp.read(8096), b""):
File "/usr/lib/python3/dist-packages/pipenv/vendor/pip9/_vendor/requests/packa
flush_decoder = True
File "/usr/local/lib/python3.9/contextlib.py", line 135, in __exit__
self.gen.throw(type, value, traceback)
File "/usr/lib/python3/dist-packages/pipenv/vendor/pip9/_vendor/requests/packa
raise ReadTimeoutError(self._pool, None, 'Read timed out.')
pip9._vendor.requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnect
此命令 运行 持续了大约两个小时,直到发生超时。谁能向我解释我究竟如何正确添加这个新包?我可以分享我们的 docker 配置,但我不确定哪些可能有用。基本上,向 pipfile
添加附加包并相应更新 pipfile.lock
的正确方法是什么?
提前感谢您提供的任何帮助。我在网上搜索过,但大多数指南似乎都无法与我们的配置进行比较,所以我很困惑。
您的项目目录是否包含 docker-compose.yml、Dockerfile 和 requirements.txt 文件?如果是这样,那么以下步骤可能会有所帮助。
打开你的requirements.txt。您应该会看到此处列出的所有 python 项目依赖项。例如,它最初可能看起来像这样:
Django==3.1.5
djangorestframework==3.12.2
添加 smart-open 作为要求,这样您的 requirements.txt 看起来像:
Django==3.1.5
djangorestframework==3.12.2
smart-open
现在,为了用这个新包更新您的映像,您需要重建映像。这通常是这样完成的:
docker-compose up --build
注意:上述命令将重新创建原始图像,但安装了 smart-open,然后将使用该图像启动一个名为 whs_webapp_1 的容器。
要确认软件包已安装,您可以 bash 进入容器,然后通过 运行 以下命令打开 python 交互式终端:
docker exec -it whs_webapp_1 bash
python (or python3)
并测试您的包是否可以导入。