Mai*_*lii 6 python fedora pyenv
我需要帮助通过 pyenv 安装 python
$ pyenv -v
pyenv 1.2.27
Run Code Online (Sandbox Code Playgroud)
我尝试安装3.6.8版本
$ pyenv install 3.6.8
Run Code Online (Sandbox Code Playgroud)
我收到错误
下载Python-3.6.8.tar.xz... -> https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz安装Python-3.6.8.. ./home/dn121283mvp1/.pyenv/plugins/python-build/bin/python-build:第 1804 行:355307 分段错误(核心已转储)“$PYTHON_BIN”-s -m Ensurepip ${ensurepip_opts} > /dev/null 2 >&1 从https://bootstrap.pypa.io/get-pip.py安装 pip ...。/home/dn121283mvp1/.pyenv/plugins/python-build/bin/python-build:第 1785 行:355338 分段错误(核心转储)“${PYTHON_BIN}”-s“${get_pip}”${GET_PIP_OPTS} 1> &4 2>&1 错误:无法通过 get-pip.py 安装 pip
构建失败(Fedora 34 使用 python-build 20180424)
检查或清理 /tmp/python-build.20210506064823.343245 处的工作树 结果记录到 /tmp/python-build.20210506064823.343245.log
最后 10 行日志: install|*) Ensurepip="" ;; \ 经济和社会委员会;\ ./python -E -m Ensurepip \ $ensurepip --root=/ ; \ fi 查看链接:/tmp/tmp4a3uh2fu 收集 setuptools 收集 pip 安装收集的软件包:setuptools,pip 已成功安装 pip-18.1 setuptools-40.6.2
我需要 3.6.8 版本才能安装
Bri*_*tch 15
您可以向 pyenv 传递补丁来修复此问题。
我在这里发布了一个解决方案https://github.com/pyenv/pyenv/issues/1889#issuecomment-837697366
您需要修补一些 Python 3.6 对象分配代码才能使用 16 字节对齐。看来这个问题已在 Python 3.7 中修复。
在将补丁提供给 pyenv 之前,必须调整补丁以不使用a父目录名称。b
在 Python 3.6.8 上进行测试,因为这就是我所需要的。
$ cat alignment.patch
Run Code Online (Sandbox Code Playgroud)
--- Include/objimpl.h
+++ Include/objimpl.h
@@ -250,7 +250,7 @@
union _gc_head *gc_prev;
Py_ssize_t gc_refs;
} gc;
- double dummy; /* force worst-case alignment */
+ long double dummy; /* force worst-case alignment */
} PyGC_Head;
extern PyGC_Head *_PyGC_generation0;
--- Objects/obmalloc.c
+++ Objects/obmalloc.c
@@ -643,8 +643,8 @@
*
* You shouldn't change this unless you know what you are doing.
*/
-#define ALIGNMENT 8 /* must be 2^N */
-#define ALIGNMENT_SHIFT 3
+#define ALIGNMENT 16 /* must be 2^N */
+#define ALIGNMENT_SHIFT 4
/* Return the number of bytes in size class I, as a uint. */
#define INDEX2SIZE(I) (((uint)(I) + 1) << ALIGNMENT_SHIFT)
Run Code Online (Sandbox Code Playgroud)
$ pyenv install --patch 3.6.8 < alignment.patch
Run Code Online (Sandbox Code Playgroud)
Downloading Python-3.6.8.tar.xz...
-> https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
Installing Python-3.6.8...
patching file Include/objimpl.h
Hunk #1 succeeded at 255 (offset 5 lines).
patching file Objects/obmalloc.c
Hunk #1 succeeded at 650 (offset 7 lines).
Installed Python-3.6.8 to /home/asdf/.pyenv/versions/3.6.8
Run Code Online (Sandbox Code Playgroud)