Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 错误:‘;PyThreadState’;{aka‘;struct’;}没有名为‘;exc#U类型’;;你是说‘;curexc#U型’;?在构建Cython扩展时_Python_C++_Linux_Struct_Cython - Fatal编程技术网

Python 错误:‘;PyThreadState’;{aka‘;struct’;}没有名为‘;exc#U类型’;;你是说‘;curexc#U型’;?在构建Cython扩展时

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

我在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@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