错误:无法为 backports.zoneinfo 构建轮子,这是安装基于 pyproject.toml 的项目所必需的

Sar*_*shi 62 python django heroku

当我过去几天尝试部署 Django 应用程序时,Heroku Build 返回此错误。Django代码和文件结构与Django官方文档相同,并且在根文件夹中添加了Procfile。

\n

日志 -

\n
-----> Building on the Heroku-20 stack\n-----> Determining which buildpack to use for this app\n-----> Python app detected\n-----> No Python version was specified. Using the buildpack default: python-3.10.4\n       To use a different version, see: https://devcenter.heroku.com/articles/python-runtimes\n       Building wheels for collected packages: backports.zoneinfo\n         Building wheel for backports.zoneinfo (pyproject.toml): started\n         Building wheel for backports.zoneinfo (pyproject.toml): finished with status 'error'\n         ERROR: Command errored out with exit status 1:\n          command: /app/.heroku/python/bin/python /app/.heroku/python/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py build_wheel /tmp/tmpqqu_1qow\n              cwd: /tmp/pip-install-txfn1ua9/backports-zoneinfo_a462ef61051d49e7bf54e715f78a34f1\n         Complete output (41 lines):\n         running bdist_wheel\n         running build\n         running build_py\n         creating build\n         creating build/lib.linux-x86_64-3.10\n         creating build/lib.linux-x86_64-3.10/backports\n         copying src/backports/__init__.py -> build/lib.linux-x86_64-3.10/backports\n         creating build/lib.linux-x86_64-3.10/backports/zoneinfo\n         copying src/backports/zoneinfo/_zoneinfo.py -> build/lib.linux-x86_64-3.10/backports/zoneinfo\n         copying src/backports/zoneinfo/_tzpath.py -> build/lib.linux-x86_64-3.10/backports/zoneinfo\n         copying src/backports/zoneinfo/_common.py -> build/lib.linux-x86_64-3.10/backports/zoneinfo\n         copying src/backports/zoneinfo/_version.py -> build/lib.linux-x86_64-3.10/backports/zoneinfo\n         copying src/backports/zoneinfo/__init__.py -> build/lib.linux-x86_64-3.10/backports/zoneinfo\n         running egg_info\n         writing src/backports.zoneinfo.egg-info/PKG-INFO\n         writing dependency_links to src/backports.zoneinfo.egg-info/dependency_links.txt\n         writing requirements to src/backports.zoneinfo.egg-info/requires.txt\n         writing top-level names to src/backports.zoneinfo.egg-info/top_level.txt\n         reading manifest file 'src/backports.zoneinfo.egg-info/SOURCES.txt'\n         reading manifest template 'MANIFEST.in'\n         warning: no files found matching '*.png' under directory 'docs'\n         warning: no files found matching '*.svg' under directory 'docs'\n         no previously-included directories found matching 'docs/_build'\n         no previously-included directories found matching 'docs/_output'\n         adding license file 'LICENSE'\n         adding license file 'licenses/LICENSE_APACHE'\n         writing manifest file 'src/backports.zoneinfo.egg-info/SOURCES.txt'\n         copying src/backports/zoneinfo/__init__.pyi -> build/lib.linux-x86_64-3.10/backports/zoneinfo\n         copying src/backports/zoneinfo/py.typed -> build/lib.linux-x86_64-3.10/backports/zoneinfo\n         running build_ext\n         building 'backports.zoneinfo._czoneinfo' extension\n         creating build/temp.linux-x86_64-3.10\n         creating build/temp.linux-x86_64-3.10/lib\n         gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/app/.heroku/python/include/python3.10 -c lib/zoneinfo_module.c -o build/temp.linux-x86_64-3.10/lib/zoneinfo_module.o -std=c99\n         lib/zoneinfo_module.c: In function \xe2\x80\x98zoneinfo_fromutc\xe2\x80\x99:\n         lib/zoneinfo_module.c:600:19: error: \xe2\x80\x98_PyLong_One\xe2\x80\x99 undeclared (first use in this function); did you mean \xe2\x80\x98_PyLong_New\xe2\x80\x99?\n           600 |             one = _PyLong_One;\n               |                   ^~~~~~~~~~~\n               |                   _PyLong_New\n         lib/zoneinfo_module.c:600:19: note: each undeclared identifier is reported only once for each function it appears in\n         error: command '/usr/bin/gcc' failed with exit code 1\n         ----------------------------------------\n         ERROR: Failed building wheel for backports.zoneinfo\n       Failed to build backports.zoneinfo\n       ERROR: Could not build wheels for backports.zoneinfo, which is required to install pyproject.toml-based projects\n !     Push rejected, failed to compile Python app.\n !     Push failed\n
Run Code Online (Sandbox Code Playgroud)\n

谢谢。

\n

小智 119

backports.zoneinfo使用python >= 3.9时避免安装

编辑你的requirements.txt文件

从:

backports.zoneinfo==0.2.1
Run Code Online (Sandbox Code Playgroud)

到:

backports.zoneinfo;python_version<"3.9"
Run Code Online (Sandbox Code Playgroud)

或者:

backports.zoneinfo==0.2.1;python_version<"3.9"
Run Code Online (Sandbox Code Playgroud)

您可以在这里这里阅读更多相关信息


小智 42

我在heroku上部署我的应用程序时遇到了同样的错误,问题实际上是当你在heroku上部署它时,heroku默认使用python版本3.10.x,而backports.zoneinfo在这个版本上无法正常工作,所以我建议您切换到版本 3.8.x(稳定)。

为此,您需要告诉 heroku 切换该版本,可以按如下方式完成:

  1. 根目录中创建runtime.txt
  2. python-3.8.10 <- 将其写入“ runtime.txt ”以指定版本。
  3. 然后,heroku 将安装此版本,您将不会再收到错误。

PS:它为我工作,后来当heroku删除这个错误时,你可以切换到python最新版本。


小智 9

我在创建容器时遇到了同样的错误。我通过使用我的 Python venv ie 3.8.9 的确切版本解决了该错误

之前的图像中,我使用 3.8-alpine 来制作图像的较轻版本。但是,它对我来说不起作用,并且出现了与您相同的错误。

  • 谢谢通过使用“3.8.13-slim-buster”而不是 alpine 解决了这个问题 (2认同)

小智 5

在 Mac pro 上尝试和测试:

在终端上检查你的 python 版本

python3 --version
Run Code Online (Sandbox Code Playgroud)

或者

python --version
Run Code Online (Sandbox Code Playgroud)

如果 python 版本为 3.9 及以上,则将“requirements.txt”文件中的以下 (backports.zoneinfo) 行更新为:

  • backports.zoneinfo;python_version<"3.9"

跑步 -

pip3 install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

再次测试运行您的应用程序,应该可以在这个阶段工作。