Pyclipper 安装错误:"tp_print is not a member of _typeobject"



我正在尝试安装pyclipper以便与nototools一起使用。https://github.com/googlefonts/nototools但我无法安装pyclipper。我认为Visual Studio构建工具有一些问题。

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:usersphuwiappdatalocalprogramspythonpython39python.exe' 'c:usersphuwiappdatalocalprogramspythonpython39libsite-packagespip_vendorpep517_in_process.py' build_wheel 'C:UsersphuwiAppDataLocalTemptmpwa7t8eac'
cwd: C:UsersphuwiAppDataLocalTemppip-install-ejg_l8mepyclipper_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 buildtemp.win-amd64-3.9
creating buildtemp.win-amd64-3.9Release
creating buildtemp.win-amd64-3.9Releasepyclipper
C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.28.29333binHostX86x64cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Ic:usersphuwiappdatalocalprogramspythonpython39include -Ic:usersphuwiappdatalocalprogramspythonpython39include -IC:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.28.29333include -IC:Program Files (x86)Windows Kits10include10.0.18362.0ucrt -IC:Program Files (x86)Windows Kits10include10.0.18362.0shared -IC:Program Files (x86)Windows Kits10include10.0.18362.0um -IC:Program Files (x86)Windows Kits10include10.0.18362.0winrt -IC:Program Files (x86)Windows Kits10include10.0.18362.0cppwinrt /EHsc /Tppyclipper/clipper.cpp /Fobuildtemp.win-amd64-3.9Releasepyclipper/clipper.obj
clipper.cpp
C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.28.29333binHostX86x64cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Ic:usersphuwiappdatalocalprogramspythonpython39include -Ic:usersphuwiappdatalocalprogramspythonpython39include -IC:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.28.29333include -IC:Program Files (x86)Windows Kits10include10.0.18362.0ucrt -IC:Program Files (x86)Windows Kits10include10.0.18362.0shared -IC:Program Files (x86)Windows Kits10include10.0.18362.0um -IC:Program Files (x86)Windows Kits10include10.0.18362.0winrt -IC:Program Files (x86)Windows Kits10include10.0.18362.0cppwinrt /EHsc /Tppyclipper/pyclipper.cpp /Fobuildtemp.win-amd64-3.9Releasepyclipper/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:usersphuwiappdatalocalprogramspythonpython39includecpython/object.h(193): note: see declaration of '_typeobject'
pyclipper/pyclipper.cpp(9413): error C2039: 'tp_print': is not a member of '_typeobject'
c:usersphuwiappdatalocalprogramspythonpython39includecpython/object.h(193): note: see declaration of '_typeobject'
pyclipper/pyclipper.cpp(9421): error C2039: 'tp_print': is not a member of '_typeobject'
c:usersphuwiappdatalocalprogramspythonpython39includecpython/object.h(193): note: see declaration of '_typeobject'
pyclipper/pyclipper.cpp(9427): error C2039: 'tp_print': is not a member of '_typeobject'
c:usersphuwiappdatalocalprogramspythonpython39includecpython/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':不是'_typeobject'的成员"意味着该代码适用于Python<=3.8.

降级到Python 3.8并重试。

向上pyclipper刚刚发布了带有Python 3.9轮子的1.2.1版本。

PS。永远不要急于使用较新的Python主要版本,等到所有第三方库都适应后再使用。

正如@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错误,buildozer完成了构建,所以我在bin目录中有一个文件可以安装。

作为一个警告,这对我来说并不是故事的结束;然后它导致了这个错误,我一直无法找到解决方案。

最新更新