pyclipper安装错误:“tp_print不是_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 Studio2019BuildToolsVCToolsMSVC14.28.29333binHostX86x64cl.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刚刚发布了带有用于 Python 3.9 的轮子的1.2.1 版。

附注。永远不要急于使用更新的 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++ 代码。


以上是pyclipper安装错误:“tp_print不是_typeobject的成员”的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>