[英]Python3.8.2 Compile Cython Extensions Error - warning: 'tp_print' is deprecated
[英]pyclipper installation error: "tp_print is not a member of _typeobject"
我正在尝试安装 pyclipper 以与 nototools 一起使用。 https://github.com/googlefonts/nototools但是我无法安装 pyclipper。 我认为 Visual Studio buildtools 有一些东西。
Collecting pyclipper==1.1.0.post1
Using cached pyclipper-1.1.0.post1.zip (135 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing wheel metadata ... done
Building wheels for collected packages: pyclipper
Building wheel for pyclipper (PEP 517) ... error
ERROR: Command errored out with exit status 1:
command: 'c:\users\phuwi\appdata\local\programs\python\python39\python.exe' 'c:\users\phuwi\appdata\local\programs\python\python39\lib\site-packages\pip\_vendor\pep517\_in_process.py' build_wheel 'C:\Users\phuwi\AppData\Local\Temp\tmpwa7t8eac'
cwd: C:\Users\phuwi\AppData\Local\Temp\pip-install-ejg_l8me\pyclipper_be85d240fbf84e1388f6c535a16010eb
Complete output (26 lines):
Distribution mode: Compiling Cython generated .cpp sources.
running bdist_wheel
running build
running build_ext
building 'pyclipper' extension
creating build
creating build\temp.win-amd64-3.9
creating build\temp.win-amd64-3.9\Release
creating build\temp.win-amd64-3.9\Release\pyclipper
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Ic:\users\phuwi\appdata\local\programs\python\python39\include -Ic:\users\phuwi\appdata\local\programs\python\python39\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared -IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt /EHsc /Tppyclipper/clipper.cpp /Fobuild\temp.win-amd64-3.9\Release\pyclipper/clipper.obj
clipper.cpp
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Ic:\users\phuwi\appdata\local\programs\python\python39\include -Ic:\users\phuwi\appdata\local\programs\python\python39\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared -IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt /EHsc /Tppyclipper/pyclipper.cpp /Fobuild\temp.win-amd64-3.9\Release\pyclipper/pyclipper.obj
pyclipper.cpp
pyclipper/pyclipper.cpp(7938): warning C4267: '=': conversion from 'size_t' to 'int', possible loss of data
pyclipper/pyclipper.cpp(8068): warning C4267: '=': conversion from 'size_t' to 'int', possible loss of data
pyclipper/pyclipper.cpp(9405): error C2039: 'tp_print': is not a member of '_typeobject'
c:\users\phuwi\appdata\local\programs\python\python39\include\cpython/object.h(193): note: see declaration of '_typeobject'
pyclipper/pyclipper.cpp(9413): error C2039: 'tp_print': is not a member of '_typeobject'
c:\users\phuwi\appdata\local\programs\python\python39\include\cpython/object.h(193): note: see declaration of '_typeobject'
pyclipper/pyclipper.cpp(9421): error C2039: 'tp_print': is not a member of '_typeobject'
c:\users\phuwi\appdata\local\programs\python\python39\include\cpython/object.h(193): note: see declaration of '_typeobject'
pyclipper/pyclipper.cpp(9427): error C2039: 'tp_print': is not a member of '_typeobject'
c:\users\phuwi\appdata\local\programs\python\python39\include\cpython/object.h(193): note: see declaration of '_typeobject'
pyclipper/pyclipper.cpp(10553): warning C4996: '_PyUnicode_get_wstr_length': deprecated in 3.3
pyclipper/pyclipper.cpp(10569): warning C4996: '_PyUnicode_get_wstr_length': deprecated in 3.3
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.28.29333\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
----------------------------------------
ERROR: Failed building wheel for pyclipper
Failed to build pyclipper
ERROR: Could not build wheels for pyclipper which use PEP 517 and cannot be installed directly ```
tp_print
方法已从 Python 3.9 中的 API 中删除。 错误“ 'tp_print': is not a member of '_typeobject' ”表示代码适用于 Python <= 3.8。
降级到 Python 3.8 并重试。
更新。 pyclipper
刚刚发布了带有轮子的 1.2.1 版Python 3.9。
PS。 永远不要急于更新 Python 的主要版本,等到所有 3rd 方库都适应。
正如@phd 正确指出的那样, tp_print
从 Python 3.9 开始删除。 然而,在这个(和其他类似的问题)中,C/C++ 代码是由 Cython 生成的,而不是手写的。 Cython 用于制作扩展模块的好处之一是它可以维护并跟上 Python 中的更改。 因此,只需使用最新版本的 Cython 重新生成 C/C++ 代码,即可轻松使模块再次兼容。
对于这种特定情况,PyClipper 包含两种构建模块的方法: https://github.com/fonttools/pyclipper/blob/master/README.rst#install 。 第一个只编译预生成的 C++ 代码,而第二个使用 Cython 重新生成 C++ 代码。 使用第二种方法重建它会解决你的问题。
碰巧的是,PyClipper 现在已经更新了他们自己的模块,因此不再需要这样做,但是对于因类似错误而失败的其他模块,值得考虑使用更新版本的 Cython 重新生成 C/C++ 代码。
对我来说,解决方案非常简单。 在buildozer.spec文件中放入以下要求,其中版本号(即 3.6.9)与我在系统上安装的 python 版本匹配
# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = python3==3.6.9, hostpython3==3.6.9
这消除了我所有的 cython 错误,builodozer 完成了构建,所以我在 bin 中有一个文件可以安装。
作为警告,对我来说故事还没有结束; 然后它导致这个错误,我一直无法找到解决方案..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.