Python 错误:‘;PyThreadState’;{aka‘;struct’;}没有名为‘;exc#U类型’;;你是说‘;curexc#U型’;?在构建Cython扩展时
我在Python3.8中遇到了以下错误,而在Python3.6中没有遇到这个错误。如何使其与Python 3.8一起工作?为了重现错误,请按照以下步骤操作: 我有:Python 错误:‘;PyThreadState’;{aka‘;struct’;}没有名为‘;exc#U类型’;;你是说‘;curexc#U型’;?在构建Cython扩展时,python,c++,linux,struct,cython,Python,C++,Linux,Struct,Cython,我在Python3.8中遇到了以下错误,而在Python3.6中没有遇到这个错误。如何使其与Python 3.8一起工作?为了重现错误,请按照以下步骤操作: 我有: $ pip --version pip 20.3.3 from /home/mona/venv/tsdf/lib/python3.8/site-packages/pip (python 3.8) 19149/31772MB(tsdf) [3645:3637 0:2092] 11:06:58 Tue Jan 12 [mona@gok
$ pip --version
pip 20.3.3 from /home/mona/venv/tsdf/lib/python3.8/site-packages/pip (python 3.8)
19149/31772MB(tsdf)
[3645:3637 0:2092] 11:06:58 Tue Jan 12 [mona@goku:pts/0 +1] ~/mesh-fusion/libfusiongpu
$ python
Python 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cython
>>> cython.__version__
'0.29.21'
>>> quit()
19149/31772MB(tsdf)
[3645:3637 0:2093] 11:07:14 Tue Jan 12 [mona@goku:pts/0 +1] ~/mesh-fusion/libfusiongpu
$ lsb_release -a
LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 20.04.1 LTS
Release: 20.04
Codename: focal
19365/31772MB(tsdf)
使用
-f
(或-Force
)强制重新生成/重新生成加密文件,即:
或者如果使用pip
:
pip install --global-option build --global-option --force .
这可以大致解释为:在安装之前,使用选项´--force`运行构建
(包括构建´扩展
)
目前的问题是,Cython生成的c/cpp文件将来可能与新的Python版本不兼容 例如,Cython0.27不支持Python3.8,因为Python3.8在当时还不存在。因此,使用Cython 0.27创建的c/cpp文件(例如,从git存储库中创建的
cyfusion.cpp
)不会使用Py3.8+-header构建
distutils
使用时间戳来决定是否应重建/重新生成/重新生成文件,就其而言,Cython生成的cyfusion.cpp
-文件是最新的-因为cyfusion.pyx
在生成后没有更改。完全不同的Python/Cython版本业务根本没有考虑在内
因此,强制distutils重建所有内容可以解决过时的c/cpp文件的问题
总的来说,我认为将cython生成的文件放入发行版/git不是一个好主意,因为它可能/将成为未来的绊脚石,以下是一些例子:
- “”tp_print不是_typeobject“”的成员-Python3.9+的错误(例如this)
- 较旧的cython版本没有属性
(例如,此)\uuuuuu reduce\uuu cython\uuuuu
另一个可能的修复方法是从distribution/git repository中删除过时的(cython生成的)
cyfusion.cpp
-文件并运行
python setup.py build_ext -i
之后。我的问题由
改变
到
非常感谢您的回复。我按照你的建议做了,得到了这个错误@MonaJalal,你在原地构建时没有使用-f/--force。您可以使用pip安装,也可以就地构建。两者都做没有意义。
pip install --global-option build --global-option --force .
python setup.py build_ext -i
python setup.py build_ext --inplace
python setup.py build_ext --inplace -force