關(guān)于pip install uwsgi安裝失敗問題的解決方案
pip install uwsgi安裝失敗問題解決
問題描述
Linux下使用python開發(fā),需要uwsgi模塊時(shí),常常會(huì)出現(xiàn)pip install 失敗的情況,就像下圖這樣。
是什么原因造成的呢?
因?yàn)槿鄙僖粋€(gè)python-devel包,所以只需要下載安裝這個(gè)包就可以解決了。
但是要特別注意python版本要與之對應(yīng)的問題。
[root@VM_0_13_centos ~]# pip install uwsgi
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
Collecting uwsgi
Downloading http://mirrors.tencentyun.com/pypi/packages/98/b2/19b34b20662d111f7d2f926cdf10e13381761dd7dbd10666b9076cbdcd22/uwsgi-2.0.17.tar.gz (798kB)
100% |████████████████████████████████| 798kB 2.6MB/s
Installing collected packages: uwsgi
Running setup.py install for uwsgi ... error
******省略******
[gcc -pthread] core/config_py.o
*** uWSGI compiling embedded plugins ***
[gcc -pthread] plugins/python/python_plugin.o
In file included from plugins/python/python_plugin.c:1:0:
plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
#include <Python.h>
^
compilation terminated.
----------------------------------------
Command "/usr/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-e385dqxe/uwsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-azcl8hbu/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-e385dqxe/uwsgi/
解決辦法
從yum源上下載安裝對應(yīng)python版本的python-devel,如果不清楚的話先用 python --version 命令查看python版本,然后yum search python3,Tab鍵搜索出來下載。
[root@VM_0_13_centos ~]# yum install python36u-devel Loaded plugins: fastestmirror, langpacks Repository epel is listed more than once in the configuration* ******省略****** Installed: ? python36u-devel.x86_64 0:3.6.5-1.ius.centos7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? Complete!
Python-dev是個(gè)啥?
linux發(fā)行版通常會(huì)把類庫的頭文件和相關(guān)的pkg-config分拆成一個(gè)單獨(dú)的xxx-dev(el)包.以下情況需要python-dev包:
1.安裝一個(gè)源外的python類庫, 而這個(gè)類庫內(nèi)含需要編譯的調(diào)用python api的c/c++文件;
2.自己寫的一個(gè)程序編譯需要鏈接libpythonXX.(a|so)
(不含使用ctypes/ffi或者裸dlsym方式直接調(diào)用libpython.so)
其他正常使用python或者通過安裝源內(nèi)的python類庫的不需要python-dev.
linux下通過pip安裝最新uwsgi
通過yum install uwsgi 安裝的uwsgi在進(jìn)行測試的時(shí)候,發(fā)現(xiàn)版本是2.0.15,但是啟動(dòng)uwsgi測試的時(shí)候報(bào)參數(shù)錯(cuò)誤,后來改用pip安裝(先yum remove uwsgi刪除老的uwsgi)就成功了。uwsgi安裝完成之后的樣子
安裝pip
wget https://bootstrap.pypa.io/get-pip.py python ./get-pip.py
安裝uwsgi,一個(gè)干凈的linux系統(tǒng)安裝uwsgi過程中,會(huì)遇到以下兩個(gè)錯(cuò)誤。
Exception: you need a C compiler to build uWSGI
----------------------------------------
Failed building wheel for uwsgi
Running setup.py clean for uwsgi
Failed to build uwsgi
Installing collected packages: uwsgi
Running setup.py install for uwsgi ... error
解決辦法:yum install gcc-*
另外一個(gè)錯(cuò)誤:
fatal error: Python.h: No such file or directory
解決辦法:yum install python-devel
安裝成功的打印信息:
[root@VM_68_155_centos ~]# pip install uwsgi
Collecting uwsgi
Using cached uwsgi-2.0.16.tar.gz
Building wheels for collected packages: uwsgi
Running setup.py bdist_wheel for uwsgi ... done
Stored in directory: /root/.cache/pip/wheels/3a/e7/aa/24207bb9d885fe11fab3f7ad7d9d80c538a423d98494d43fd7
Successfully built uwsgi
Installing collected packages: uwsgi
Successfully installed uwsgi-2.0.16
[root@VM_68_155_centos ~]#
編輯一個(gè)簡單的測試文件hello.py:
def application(env,start_response): start_response('200 OK',[('Content-Type','text/html')]) return "Hello,world"
啟動(dòng)uwsgi : uwsgi --http-socket :80 --wsgi-file hello.py
[root@VM_68_155_centos ~]# /usr/bin/uwsgi --http-socket :80 --wsgi-file hello.py
*** Starting uWSGI 2.0.16 (64bit) on [Fri Feb 23 15:31:16 2018] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-16) on 23 February 2018 07:28:20
os: Linux-3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017
nodename: VM_68_155_centos
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /root
detected binary path: /usr/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
dropping root privileges as early as possible
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 3895
your memory page size is 4096 bytes
detected max file descriptor number: 100001
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :80 fd 3
dropping root privileges after socket binding
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
Python version: 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x7d64c0
dropping root privileges after plugin initialization
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72904 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7d64c0 pid: 6557 (default app)
dropping root privileges after application loading
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 6557, cores: 1)
測試uwsgi-server
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
sklearn和keras的數(shù)據(jù)切分與交叉驗(yàn)證的實(shí)例詳解
這篇文章主要介紹了sklearn和keras的數(shù)據(jù)切分與交叉驗(yàn)證的實(shí)例詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python爬取百度貼吧前1000頁內(nèi)容(requests庫面向?qū)ο笏枷雽?shí)現(xiàn))
這篇文章主要介紹了python爬取百度貼吧前1000頁內(nèi)容(requests庫面向?qū)ο笏枷雽?shí)現(xiàn)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Pytorch中Softmax和LogSoftmax的使用詳解
這篇文章主要介紹了Pytorch中Softmax和LogSoftmax的使用詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Python抓取通過Ajax加載數(shù)據(jù)的示例
在網(wǎng)頁上,有一些內(nèi)容是通過執(zhí)行Ajax請求動(dòng)態(tài)加載數(shù)據(jù)渲染出來的,本文主要介紹了使用Python抓取通過Ajax加載數(shù)據(jù),感興趣的可以了解一下2023-05-05Python?requests下載文件的幾種常用方法(附代碼)
這篇文章主要介紹了五種下載方式的實(shí)現(xiàn)方法,包括基礎(chǔ)下載、大文件分塊下載、帶有斷點(diǎn)續(xù)傳的下載、帶有超時(shí)和重試的下載以及完整的下載器實(shí)現(xiàn),文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2025-03-03Python math庫 ln(x)運(yùn)算的實(shí)現(xiàn)及原理
這篇文章主要介紹了Python math庫 ln(x)運(yùn)算的實(shí)現(xiàn)及原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07