python nginx+uwsgi+django 部署时遇到的坑

2,244 阅读2分钟

记录部署时遇到的问题,供查询使用。方便自己也方便他人

环境: Django=2.1.5 python3.6 uwsgi2.0 Red Hat

uwsgi loading shared libraries:libicui18n.so.58 异常处理

uwsgi: error while loading shared libraries: libicui18n.so.58: cannot open shared object file: No such file or directory

解决方案:

1. 进入python 的 bin 目录下找到 uwsgi( 可使用 which uwsgi 查看具体目录)
2. ldd uwsgi 查看缺失包
    linux-vdso.so.1 =>  (0x00007ffc14fc7000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff6b0347000)
    libm.so.6 => /lib64/libm.so.6 (0x00007ff6b0045000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007ff6afe40000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x00007ff6afbde000)
    libxml2.so.2 => /lib64/libxml2.so.2 (0x00007ff6af874000)
    libz.so.1 => /lib64/libz.so.1 (0x00007ff6af65d000)
    liblzma.so.5 => /lib64/liblzma.so.5 (0x00007ff6af437000)
    libicui18n.so.58 => not found
    libicuuc.so.58 => not found
    libicudata.so.58 => not found
    libutil.so.1 => /lib64/libutil.so.1 (0x00007ff6af233000)
    librt.so.1 => /lib64/librt.so.1 (0x00007ff6af02a000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007ff6aedf3000)
    libc.so.6 => /lib64/libc.so.6 (0x00007ff6aea30000)
    /lib64/ld-linux-x86-64.so.2 (0x00005634c289c000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00007ff6ae82c000)

3. 将 lib 下想要的包软连接到 /lib64 下(64 位系统). 
# 我使用的是虚拟环境,所有这个 lib已经 lib64 目录都在原生 python 环境下

4. 此时运行会提示缺失CXXABI 文件
# 可使用以下命令查看 strings /usr/lib64/libstdc++.so.6|grep CXXABI
将 /lib 文件下的 libstdc++.so.6.0.24 
拷贝到 /lib64中(cp libstdc++.so.6.0.24 /lib64/), 
删除原有的软连接,新建软连接 
ln -s libstdc++.so.6.0.24 libstdc++.so.6

####Cpython sys.version 报错问题

File "/usr/share/Anaconda3/lib/python3.6/platform.py", line 1257, in python_implementation
    return _sys_version()[0]
  File "/usr/share/Anaconda3/lib/python3.6/platform.py", line 1215, in _sys_version
    repr(sys_version))
ValueError: failed to parse CPython sys.version: '3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 18:10:19) \n[GCC 7.2.0]'

解决方案

_sys_version_parser = re.compile(
    r'(?:\|[^|]*\|)*\s*' #去掉'|Anaconda xxx|'等,避免出现failed to parse CPython sys.version
    r'([\w.+]+)\s*'  # "version<space>"
    r'\(#?([^,]+)'  # "(#buildno"
    r'(?:,\s*([\w ]*)'  # ", builddate"
    r'(?:,\s*([\w :]*))?)?\)\s*'  # ", buildtime)<space>"
    r'\[([^\]]+)\]?', re.ASCII)  # "[compiler]"