Python 交互模式下的段错误

标签 python miniconda

Python是通过conda安装的:

(base) [kangl@login05]~% which python
~/miniconda3/bin/python

直接以迭代模式运行python时,会出现段错误:

(base) [kangl@login05]~% python
Python 3.10.10 | packaged by conda-forge | (main, Mar 24 2023, 20:08:06) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
zsh: segmentation fault  python

但是,python脚本运行成功:

(base) [kangl@login05]~% python -c "print('hello world')"
hello world

ipython 成功运行:

(base) [kangl@login05]~% ipython
Python 3.10.10 | packaged by conda-forge | (main, Mar 24 2023, 20:08:06) [GCC 11.3.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

然后我尝试用 gdb 调试它:

(base) [kangl@login04]~% gdb python
GNU gdb (GDB) 11.2
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-conda-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from python...
(gdb) run
Starting program: /users/kangl/miniconda3/bin/python
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Python 3.10.10 | packaged by conda-forge | (main, Mar 24 2023, 20:08:06) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

Program received signal SIGSEGV, Segmentation fault.
0x00002aaaab96b691 in __strlen_sse2_pminub () from /lib64/libc.so.6

还有

(gdb) run
Starting program: /users/kangl/miniconda3/bin/python
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Python 3.10.10 | packaged by conda-forge | (main, Mar 24 2023, 20:08:06) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

Program received signal SIGSEGV, Segmentation fault.
0x00002aaaab96b691 in __strlen_sse2_pminub () from /lib64/libc.so.6
(gdb) backtrace
#0  0x00002aaaab96b691 in __strlen_sse2_pminub () from /lib64/libc.so.6
#1  0x00002aaaaac53f49 in _rl_init_locale ()
   from /users/kangl/miniconda3/lib/python3.10/lib-dynload/../../libreadline.so.8
#2  0x00002aaaaac54044 in _rl_init_eightbit ()
   from /users/kangl/miniconda3/lib/python3.10/lib-dynload/../../libreadline.so.8
#3  0x00002aaaaac32797 in rl_initialize ()
   from /users/kangl/miniconda3/lib/python3.10/lib-dynload/../../libreadline.so.8
#4  0x00002aaaaaad4a7d in setup_readline (mod_state=0x2aaab21b02a0)
    at /usr/local/src/conda/python-3.10.10/Modules/readline.c:1289
#5  PyInit_readline () at /usr/local/src/conda/python-3.10.10/Modules/readline.c:1502
#6  0x000055555576939a in _PyImport_LoadDynamicModuleWithSpec (fp=0x0,
    spec=<ModuleSpec(name='readline', loader=<ExtensionFileLoader(name='readline', path='/users/kangl/miniconda3/lib/python3.10/lib-dynload/readline.cpython-310-x86_64-linux-gnu.so') at remote 0x2aaab21b09a0>, origin='/users/kangl/miniconda3/lib/python3.10/lib-dynload/readline.cpython-310-x86_64-linux-gnu.so', loader_state=None, submodule_search_locations=None, _set_fileattr=True, _cached=None) at remote 0x2aaab21b02e0>)
    at /usr/local/src/conda/python-3.10.10/Python/importdl.c:167
#7  _imp_create_dynamic_impl (module=<optimized out>, file=<optimized out>,
    spec=<ModuleSpec(name='readline', loader=<ExtensionFileLoader(name='readline', path='/users/kangl/miniconda3/lib/python3.10/lib-dynload/readline.cpython-310-x86_64-linux-gnu.so') at remote 0x2aaab21b09a0>, origin='/users/kangl/miniconda3/lib/python3.10/lib-dynload/readline.cpython-310-x86_64-linux-gnu.so', loader_state=None, submodule_search_locations=None, _set_fileattr=True, _cached=None) at remote 0x2aaab21b02e0>)
    at /usr/local/src/conda/python-3.10.10/Python/import.c:2050
#8  _imp_create_dynamic (module=<optimized out>, args=args@entry=0x2aaab212e998, nargs=<optimized out>)
    at /usr/local/src/conda/python-3.10.10/Python/clinic/import.c.h:330
#9  0x0000555555694d14 in cfunction_vectorcall_FASTCALL (
    func=<built-in method create_dynamic of module object at remote 0x2aaaaab8e610>, args=0x2aaab212e998,
    nargsf=<optimized out>, kwnames=<optimized out>) at /usr/local/src/conda/python-3.10.10/Objects/methodobject.c:430
#10 0x000055555568a39b in do_call_core (kwdict={},
--Type <RET> for more, q to quit, c to continue without paging--

看起来对 readline 库的依赖被打破为 Max说。但我不知道如何解决它。我尝试使用 mamba install -c conda-forge readline --force-reinstall 重新安装 readline 但它不起作用。

最佳答案

遇到类似的错误后,我发现以下几行代码解决了段错误:

export LANGUAGE=UTF-8 
export LC_ALL=en_US.UTF-8 
export LANG=UTF-8 
export LC_CTYPE=en_US.UTF-8
export LANG=en_US.UTF-8 
export LC_COLLATE=$LANG 
export LC_CTYPE=$LANG 
export LC_MESSAGES=$LANG 
export LC_MONETARY=$LANG 
export LC_NUMERIC=$LANG 
export LC_TIME=$LANG 
export LC_ALL=$LANG

关于Python 交互模式下的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75921380/

相关文章:

django - Dockercontinuum/miniconda3容器未显示 “conda”

anaconda - 使用 meta.yaml 中描述的要求更新当前环境

python - Conda 在使用 channel 时无法解析 requirements.yml

python - 查找 session 重叠

python - Python/Django 中的个性化/随机 URL

python - Peewee 的 Where 子句中的 IN 条件

python 列表作为嵌套列表的索引

javascript - Cherrypy和JS,找不到图像

python-3.x - 是否可以使用依赖项完全脱机进行conda安装?

python - 如何在单个 Conda 环境中安装两个版本的 Python?