uwsgi手动安装时报错ValueError: invalid literal for int() with base 10: '32_1'

安装uwsgi,安装步骤如下

wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd <dir>
python uwsgiconfig.py --build

报错

using profile: buildconf/default.ini
detected include path: ['/usr/local/include', '/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include', '/usr/include']
Traceback (most recent call last):
  File "uwsgiconfig.py", line 1612, in <module>
    build_uwsgi(uc, is_cflags, gcll=gcll)
  File "uwsgiconfig.py", line 280, in build_uwsgi
    gcc_list, cflags, ldflags, libs = uc.get_gcll()
  File "uwsgiconfig.py", line 983, in get_gcll
    elif int(k_minor) >= 25:
ValueError: invalid literal for int() with base 10: '32_1'

这个报错是因为python中int转换字符串的时候,默认转换的只能是数字,'32_1'显然不是一个数字,谁能想到从官网上下载的脚本居然有bug

肿木办呢?打开这个文件的源码,找到983行,代码为

        if timer_mode == 'auto':
            if uwsgi_os == 'Linux':
                k_all = uwsgi_os_k.split('.')
                k_base = k_all[0]
                k_major = k_all[1]
                if len(k_all) > 2:
                    k_minor = k_all[2]
                else:
                    k_minor = 0
                if int(k_base) > 2:
                    timer_mode = 'timerfd'
                elif int(k_minor) >= 25:
                    timer_mode = 'timerfd'
                else:
                    timer_mode = 'none'

取的应该是版本号

# uname -a
Linux jiu_bu_gao_su_ni 2.6.32_1-12-0-0 #1 SMP Mon Aug 12 17:59:52 CST 2013 x86_64 x86_64 x86_64 GNU/Linux

这样在代码里强制加一个k_minor=32就可以了

        if timer_mode == 'auto':
            if uwsgi_os == 'Linux':
                k_all = uwsgi_os_k.split('.')
                k_base = k_all[0]
                k_major = k_all[1]
                if len(k_all) > 2:
                    k_minor = k_all[2]
                else:
                    k_minor = 0
                k_minor = 32
                if int(k_base) > 2:
                    timer_mode = 'timerfd'
                elif int(k_minor) >= 25:
                    timer_mode = 'timerfd'
                else:
                    timer_mode = 'none'

测试一下,安装成功

python uwsgiconfig.py --build

把同路径下生成的uwsgi拷贝到/usr/bin下或者/usr/sbin就可以了

 

posted @ 2017-03-30 18:34  巫谢  阅读(3924)  评论(0编辑  收藏  举报