操作系统:CentOS Linux release 8.5.2111
Python:3.10.14

参考 https://wiki.python.org/moin/BuildStatically 进行编译:

```
./configure LDFLAGS="-static" CFLAGS="-static" CPPFLAGS="-static" --disable-shared --enable-optimizations
make LDFLAGS="-static" LINKFORSHARED=" "
make altinstall
```

最后一步 `make altinstall` 失败:

```
copying build/scripts-3.10/pydoc3.10 -> /usr/local/bin
copying build/scripts-3.10/idle3.10 -> /usr/local/bin
copying build/scripts-3.10/2to3-3.10 -> /usr/local/bin
changing mode of /usr/local/bin/pydoc3.10 to 755
changing mode of /usr/local/bin/idle3.10 to 755
changing mode of /usr/local/bin/2to3-3.10 to 755
rm /usr/local/lib/python3.10/lib-dynload/_sysconfigdata__linux_x86_64-linux-gnu.py
rm -r /usr/local/lib/python3.10/lib-dynload/__pycache__
/usr/bin/install -c -m 644 ./Misc/python.man \
        /usr/local/share/man/man1/python3.10.1
if test "xupgrade" != "xno"  ; then \
        case upgrade in \
                upgrade) ensurepip="--altinstall --upgrade" ;; \
                install|*) ensurepip="--altinstall" ;; \
        esac; \
         ./python -E -m ensurepip \
                $ensurepip --root=/ ; \
fi
Traceback (most recent call last):
  File "/root/Python-3.10.14/Lib/subprocess.py", line 69, in <module>
    import msvcrt
ModuleNotFoundError: No module named 'msvcrt'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/root/Python-3.10.14/Lib/runpy.py", line 187, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/root/Python-3.10.14/Lib/runpy.py", line 146, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/root/Python-3.10.14/Lib/runpy.py", line 110, in _get_module_details
    __import__(pkg_name)
  File "/root/Python-3.10.14/Lib/ensurepip/__init__.py", line 4, in <module>
    import subprocess
  File "/root/Python-3.10.14/Lib/subprocess.py", line 74, in <module>
    import _posixsubprocess
ModuleNotFoundError: No module named '_posixsubprocess'
make: *** [Makefile:1290: altinstall] Error 1
```

实际上以及编译安装成功,只是 `pip3` 无法使用:

```
# pip3
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/subprocess.py", line 69, in <module>
    import msvcrt
ModuleNotFoundError: No module named 'msvcrt'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/pip3", line 5, in <module>
    from pip._internal.cli.main import main
  File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/main.py", line 9, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/autocompletion.py", line 10, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/main_parser.py", line 5, in <module>
    import subprocess
  File "/usr/local/lib/python3.10/subprocess.py", line 74, in <module>
    import _posixsubprocess
ImportError: /usr/local/lib/python3.10/lib-dynload/_posixsubprocess.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyTuple_Type
```

```
# python3
Python 3.10.14 (main, Aug 15 2024, 10:07:53) [GCC 8.5.0 20210514 (Red Hat 8.5.0-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/subprocess.py", line 69, in <module>
    import msvcrt
ModuleNotFoundError: No module named 'msvcrt'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.10/subprocess.py", line 74, in <module>
    import _posixsubprocess
ImportError: /usr/local/lib/python3.10/lib-dynload/_posixsubprocess.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyTuple_Type
```
举报· 146 次点击
登录 注册 站外分享
8 条回复  
deplives 小成 2024-8-27 19:05:42

静态(static)编译 Python 3.10.14 报错无法编译成功,有朋友可以帮忙看看吗?

Traceback (most recent call last):
  File "/root/Python-3.10.14/Lib/subprocess.py", line 69, in <module>
    import msvcrt
ModuleNotFoundError: No module named 'msvcrt'

这个苦是 Windows 上才有的,肯定是编译错目标了
UN2758 小成 2024-8-26 11:58:15

静态(static)编译 Python 3.10.14 报错无法编译成功,有朋友可以帮忙看看吗?

看样子是 ms 的 rt 库报错?为什么你编译 linux 的 python ,会去调 ms 的库?是不是 target binary os 之类配置错了
guanzhangzhang 初学 2024-8-16 10:14:54
musl 的 rootfs 里编译试试?
houzhiqiang 小成 2024-8-15 16:02:12
编译完后要跑自带的测试集看编译是否正确的,越老的 python 版本越难静态编译
不然去 github 上找一个别人配置好的静态编译工程
我也静态编译过 Python3.10 但是不能完整的过测试集

$ ldd build/bin/python3.10
not a dynamic executable
$ file build/bin/python3.10
build/bin/python3.10: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=546463ab44b360fbe42e38f843548bbfc6ce4d61, for GNU/Linux 3.2.0, with debug_info, not stripped
$ ./build/bin/python3.10 -m pip install --upgrade pip
Looking in indexes: https://mirrors.cloud.aliyuncs.com/pypi/simple/
Requirement already satisfied: pip in ./build/lib/python3.10/site-packages (21.2.4)
Collecting pip
  Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/d4/55/90db48d85f7689ec6f81c0db0622d704306c5284850383c090e6c7195a5c/pip-24.2-py3-none-any.whl (1.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 21.1 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 21.2.4
    Uninstalling pip-21.2.4:
      Successfully uninstalled pip-21.2.4
Successfully installed pip-24.2
proxytoworld 初学 2024-8-15 14:52:01
ldd 显示是 static link 吗
GeekGao 小成 2024-8-15 13:32:58
是不是类似这种问题  https://stackoverflow.com/questions/66814603/pip-is-not-working-error-no-module-named-msvcrt
lt0136 小成 2024-8-15 13:25:06
https://github.com/indygreg/python-build-standalone
直接用这个
ysc3839 小成 2024-8-15 11:43:53
为什么要静态编译?原始需求是什么?
返回顶部