如何解决python slim或alpine docker镜像无法使用pipenv安装软件包
我正在尝试为我的python应用程序构建docker容器,但是在通过pipenv安装python软件包时遇到问题。
如果我将基本映像设置为python:3.8.5
,则可以工作,但是如果我设置-slim
版本或-alpine
版本,它们将失败,并出现以下错误:
Traceback (most recent call last): File "/usr/local/bin/pipenv",line 8,in <module>
sys.exit(cli()) File "/usr/local/lib/python3.8/site-packages/pipenv/vendor/click/core.py",line 829,in __call__
return self.main(*args,**kwargs) File "/usr/local/lib/python3.8/site-packages/pipenv/vendor/click/core.py",line 782,in main
rv = self.invoke(ctx) File "/usr/local/lib/python3.8/site-packages/pipenv/vendor/click/core.py",line 1259,in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/local/lib/python3.8/site-packages/pipenv/vendor/click/core.py",line 1066,in invoke
return ctx.invoke(self.callback,**ctx.params) File "/usr/local/lib/python3.8/site-packages/pipenv/vendor/click/core.py",line 610,in invoke
return callback(*args,**kwargs) File "/usr/local/lib/python3.8/site-packages/pipenv/vendor/click/decorators.py",line 73,in new_func
return ctx.invoke(f,obj,*args,line 21,in new_func
return f(get_current_context(),**kwargs) File "/usr/local/lib/python3.8/site-packages/pipenv/cli/command.py",line
232,in install
retcode = do_install( File "/usr/local/lib/python3.8/site-packages/pipenv/core.py",line 2052,in
do_install
do_init( File "/usr/local/lib/python3.8/site-packages/pipenv/core.py",line 1305,in
do_init
do_install_dependencies( File "/usr/local/lib/python3.8/site-packages/pipenv/core.py",line 899,in
do_install_dependencies
batch_install( File "/usr/local/lib/python3.8/site-packages/pipenv/core.py",line 796,in
batch_install
_cleanup_procs(procs,failed_deps_queue,retry=retry) File "/usr/local/lib/python3.8/site-packages/pipenv/core.py",line 703,in
_cleanup_procs
raise exceptions.InstallError(c.dep.name,extra=err_lines) pipenv.exceptions.InstallError: ERROR: Couldn't install package:
brotlipy Package installation failed...
Dockerfile
FROM python:3.8.5-slim
RUN pip install pipenv
WORKDIR /app
COPY ./ /app/
RUN pipenv install --sequential --deploy --verbose
RUN python -m spacy download en_core_web_sm
RUN pip install gunicorn[gevent]
EXPOSE 8080
CMD gunicorn -c src/gunicorn.conf.py --chdir src wsgi:app
Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
autopep8 = "*"
[packages]
pytest = "*"
aiomysql = "*"
pytest-asyncio = "*"
spacy = "*"
nltk = "*"
jsonschema = "*"
cachetools = "*"
pycountry = "*"
boto3 = "*"
aiohttp = {extras = ["speedups"],version = "*"}
install = "*"
cchardet = "*"
aiohttp-cors = "*"
pytest-aiohttp = "*"
aiohttp-devtools = "*"
json-logging = "*"
[requires]
python_version = "3.8"
更新:
添加了要编译的软件包后,这次我得到了另一个错误,现在也需要很长时间才能运行。
RUN apk add gcc g++ libffi-dev musl-dev \
Exception information:
Traceback (most recent call last):
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/cli/base_command.py",line 216,in _main
status = self.run(options,args)
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/cli/req_command.py",line 182,in wrapper
return func(self,options,args)
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/commands/install.py",line 324,in run
requirement_set = resolver.resolve(
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/resolution/legacy/resolver.py",line 183,in resolve
discovered_reqs.extend(self._resolve_one(requirement_set,req))
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/resolution/legacy/resolver.py",line 388,in _resolve_one
abstract_dist = self._get_abstract_dist_for(req_to_install)
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/resolution/legacy/resolver.py",line 340,in _get_abstract_dist_for
abstract_dist = self.preparer.prepare_linked_requirement(req)
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/operations/prepare.py",line 482,in prepare_linked_requirement
abstract_dist = _get_prepared_distribution(
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/operations/prepare.py",line 91,in _get_prepared_distribution
abstract_dist.prepare_distribution_metadata(finder,build_isolation)
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/distributions/sdist.py",line 33,in prepare_distribution_metadata
self.req.load_pyproject_toml()
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/req/req_install.py",line 503,in load_pyproject_toml
pyproject_toml_data = load_pyproject_toml(
File "/root/.local/share/virtualenvs/app-4PlAip0Q/lib/python3.8/site-packages/pip/_internal/pyproject.py",line 95,in load_pyproject_toml
raise InstallationError(
pip._internal.exceptions.InstallationError: Disabling PEP 517 processing is invalid: project specifies a build backend of setuptools.build_meta in pyproject.toml
Removed cryptography==3.0 from https://files.pythonhosted.org/packages/bf/ac/552fc8729d90393845cc3a2062facf4a89dcbe206fa78771d60ddaae7554/cryptography-3.0.tar.gz#sha256=8e924dbc025206e97756e8903039662aa58aa9ba357d8e1d8fc29e3092322053 (from -r /tmp/pipenv-9avbndah-requirements/pipenv-ituvdg4a-requirement.txt (line 1)) from build tracker '/tmp/pip-req-tracker-roedt7he'
Removed build tracker: '/tmp/pip-req-tracker-roedt7he'
Removing intermediate container de278d8d660a
---> bb539a91d593
Step 7/10 : RUN python -m spacy download en_core_web_sm
---> Running in d568290d25da
/usr/local/bin/python: No module named spacy
解决方法
使用
可以将问题最小化到DockerfileFROM python:3.8.5-slim
RUN pip install --no-cache-dir brotlipy
如果运行此命令,则会收到错误消息
...
unable to execute 'gcc': No such file or directory
error: command 'gcc' failed with exit status 1
...
-slim
和-alpine
映像不包括C编译器,而python:3.8.5
映像则包括。如果安装C编译器,则可能会遇到其他错误,例如缺少limit.s
,ffi.h
和C ++标准库。
这是使用-alpine
图像的最小工作示例。
FROM python:3.8.5-alpine
RUN apk add gcc g++ libffi-dev musl-dev \
&& python -m pip install --no-cache-dir brotlipy \
&& apk del gcc g++ libffi-dev musl-dev
这是-slim
图片的完整示例。使用pipenv run python
运行spacy部分。
FROM python:3.8.5-slim
ARG DEBIAN_FRONTEND="noninteractive"
RUN pip install pipenv
WORKDIR /app
COPY ./ /app/
RUN apt-get update \
&& apt-get install --yes --no-install-recommends \
gcc g++ libffi-dev \
&& pipenv install --sequential --deploy --verbose \
&& apt-get autoremove --yes gcc g++ libffi-dev \
&& rm -rf /var/lib/apt/lists/*
RUN pipenv run python -m spacy download en_core_web_sm
RUN pipenv install gunicorn[gevent]
EXPOSE 8080
CMD gunicorn -c src/gunicorn.conf.py --chdir src wsgi:app
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。