Ubuntu 中通过源码安装 Python3.x 环境
最近在个人前后端分离项目时候, 后端接口程序 fastapi, 在部署的时候, 需要 Pyhton3.8 以上的环境, 但 ubuntu 默认的是 2.7 于是想通过源码安装的方式进行环境搭建.
下载
官网下载二进制源码安装包: https://www.python.org/downloads/source/
wegt https://www.python.org/ftp/python/3.8.18/Pyhton-3.8.18tgz
当然也可以自己手动去官网下载, 反正最终是源码的压缩包即可.
假设下载好的安装包为: Python-3.8.18.tgz
安装
解压安装包
tar zxvf Python-3.8.18.tgz
创建安装目录
mkdir /usr/local/python3.8
指定安装目录
cd Python-3.8.18
./configure --prefix=/usr/local/pyhton3.8
加速构建过程
-- 我的服务器是2核, 充分利用, 如果不知道可通过 nproc 查看
make -j 2
编码源码
-- 可勿用默认的 make install 以免覆盖一些默认文件
sudo make altinstall
设置软链接
ubuntu 默认是有 python2.7 环境的, 直接通过覆盖的方式将其换成 3.8即可
ln -sf /usr/local/python3.8/bin/pyhton3.8 /usr/bin/pyhton
ln -sf /usr/local/python3.8/bin/pip3.8 /usr/bin/pip
验证
python -V
Python 3.8.18
pip -V
pip 20.2.1 from /home/youge/venv/fastapi/lib/python3.8/site-packages/pip (python 3.8)
创建虚拟环境
因为要通过 uvicorn 服务器来运行后端程序, 隐藏需要在虚拟环境中来执行, 这里用 python 内置的即可
可以创建一个名为 venv 的目录来存放所有虚拟环境.
mkdir venv
进入该目录下, 通过一行命令即可创建虚拟环境, 例如这里要建的环境名为 fastapi
python -m venv fastapi
然后当前目录就会出现一个名为 fastapi 的目录, 通过 source 命令启动其 bin 下的 activate 即可.
source bin/activate
这时候就进入了虚拟环境, 准备启动项目了.
项目启动
进入项目根目录下, 例如项目启动文件是 main.py, 可以直接通过 uvicorn 服务器启动, 然后将通过 nohup其挂到后台执行即可.
nohup uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2 > /dev/null 2>&1 &
这里的 main 表示项目启动文件是 main.py, 这里 app 表示项目实例, 即 mian.py 里面有一行是,
app = FastAPI()
然后指定主机名 0.0.0.0 表示监听所有可用网络接口, 端口为 8000, 并启动两个进程.
nohup 表示将此任务挂到后台运行, > /dev/null 2>&1 & 表示不存储运行日志, 就个人小项目看啥日志, 直接改代码不就行啦.
可通过 lsof -i:xxx 查看端口占用情况:
(fastapi) youge@VM-12-5-ubuntu:~/venv/test$ lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
uvicorn 6933 youge 3u IPv4 679082892 0t0 TCP *:8000 (LISTEN)
python 6940 youge 3u IPv4 679082892 0t0 TCP *:8000 (LISTEN)
python 6941 youge 3u IPv4 679082892 0t0 TCP *:8000 (LISTEN)
(fastapi) youge@VM-12-5-ubuntu:~/venv/test$
可以看到确实有了 3个进程在监听 8000 端口. 后续要更新的话需要先停掉进程PID.
kill -9 6933
补充
项目目录设计
main.py
app
模块01
- __ init __.py
- views.py 接口逻辑
模块02
- __ init __.py
- views.py 接口逻辑
core
- __ init __ .py
- database.py 封装数据库实例的, 输出 db 实例给接口 import, 然后执行 db.execute (原生sql)
- oauth.py 封装登录认证的, 即 JWT 认证
- xxx sdk.py 类似一些图片上传 oss 等对接外部服务的封装
Tool
gen_hashed_valu.py
... 类似工具性, 测试啥的东西
最后可通过项目的 main.py 可以看看
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import uvicorn
from app.admin import user
from app.goods import goods
from app.index import index
from app.image import image
from app.notice import notice
app = FastAPI(
title="宇宙通-接口文档",
version='1.0.0',
docs_url='/docs'
)
# 演示接口用
# @app.get('/api/docs')
# def index1():
# return { 'msg': '欢迎回家!'}
# 路由分发, 类似 flask 里面的 blueprint
app.include_router(user, prefix='/api/user', tags=['用户模块'])
app.include_router(index, prefix='/api/index', tags=['首页模块'])
app.include_router(goods, prefix='/api/goods', tags=['商品模块'])
app.include_router(image, prefix='/api/image', tags=['图库模块'])
app.include_router(notice, prefix='/api/notice', tags=['公告模块'])
# app.include_router(test, prefix='/test', tags=['测试模块'])
# 允许跨域
app.add_middleware(
CORSMiddleware,
# 允许跨域的源列表,例如 ["http://www.example.org"] 等等,["*"] 表示允许任何源
allow_origins=["*"],
allow_credentials=False,
allow_methods=["*"],
allow_headers=["*"],
)
if __name__ == '__main__':
uvicorn.run('main:app', host='0.0.0.0', port=8000, reload=True, workers=1)
先到这吧, 后续来拆解具体项目细节, 这里只是环境部署做个笔记.
Ubuntu 中通过源码安装 Python3.x 环境的更多相关文章
- 在centos6.7通过源码安装python3.6.7报错“zipimport.ZipImportError: can't decompress data; zlib not available”
在centos6.7通过源码安装python3.6.7报错: zipimport.ZipImportError: can't decompress data; zlib not available 从 ...
- centos7中通过源码安装postgresql13.6
下载地址:https://www.postgresql.org/ftp/source/ 0.安装相关依赖库 centos依赖包下载地址:https://developer.aliyun.com/pac ...
- 通过源码安装PostgresSQL
通过源码安装PostgresSQL 1.1 下载源码包环境: Centos6.8 64位 yum -y install bison flex readline-devel zlib-devel yum ...
- Ubuntu 14.04 卸载通过源码安装的库
cd cere-solvermkdir buildcd buildcmake ..sudo makesudo make install 卸载通过以上方式源码安装的库 再次进入buildsudo mak ...
- 在CentOS7(虚拟机)下通过源码安装Postgresql10以及基本配置
操作系统:CentOS7 安装文件:postgresql-10.0.tar.gz 系统环境:gcc.Python 1:源码安装 [postgres@localhost ~]# tar zxvf pos ...
- 在 Ubuntu 12.04 上通过源码安装 Open vSwitch (OVS)
安装 Ubuntu 12.04, 而且更新系统 apt-getupdate; apt-getupgrade; 安装所需的package apt-get install automake autocon ...
- Ubuntu 16.04通过源码安装QUEM虚拟机
下载编译安装: wget http://download.qemu-project.org/qemu-2.9.0.tar.xz tar xvJf qemu-2.9.0.tar.xz cd qemu-2 ...
- linux通过源码安装nodejs
1.下载nodejs源码,下载地址:https://nodejs.org/en/download/ 2.下载回来后,解压缩,ubuntu系统ctrl + alt +T 打开终端 假如tar.gz压缩包 ...
- 【Git】CentOS7 通过源码安装Git
yum源仓库里的Git版本更新不及时,最新版的Git是1.8.3,但是官方的最新版早已经更新到2.9.5.想要安装最新版本Git,只能下载源码进行安装 建议最好更新git为较新版本,便于使用 1.查看 ...
- 通过源码安装RYU控制器
目录 安装 测试 安装 安装pip3 sudo apt-get install python3-pip 获取ryu源码 git clone https://github.com/osrg/ryu.gi ...
随机推荐
- 创建Graphics对象的三种方法
参考链接:https://www.cnblogs.com/wax01/p/4982691.html 方法一.利用控件或窗体的Paint事件中的PainEventArgs 在窗体或控件的Paint事件中 ...
- 有分类有tag
1 2
- 无界 | Bncr | Boundless Nodejs Chat Robot 机器人框架安装使用教程
背景:Bncr 是一个开箱即用的Nodejs Chat RoBot(会话式机器人)框架.它基于OOP函数响应式编程,具有占用小.响应快.开发易等特点,允许开发者创建高度可测试.可扩展.松散耦合且易于维 ...
- Typecho博客服务器搬家换空间方法教程
Typecho 博客搬家方法步骤: 1.备份Typecho博客数据库,进入到phpmyadmin选择自己博客的数据表进行导出备份 2.使用FTP(或者登陆空间控制面板)把所有的Typecho文件下载到 ...
- Sqoop1的导入导出
Sqoop1 和 Sqoop2 的区别 # 版本上 Sqoop1: 1.4.x Sqoop2: 1.99.x # 架构上 Sqoop1 使用 Sqoop客户端直接提交的方式(命令.将命令封装在脚本中) ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(9)
1.问题描述: 通过push token向鸿蒙手机推送一条通知,收到通知后,通知右侧不展示图片. 解决方案: 检查一下是否存在图片风控:https://developer.huawei.com/con ...
- apache和nginx關聯php的過程
Nginx端 Nginx是一個服務器,同時也是一個功能強大的proxy服務器,除了進行http請求的代理,還可以進行其他協議請求代理(fastCgi協議),為了能使nginx理解fastCgi協議,n ...
- vue3用vite新建项目
1. npm init vue@latest vue3-project 调用create-app创建, 指定了目录是vue3-projece,但是,紧接着有一堆配置要询问. 2. npm create ...
- php用token做登录认证
https://blog.csdn.net/qq_20869933/article/details/133201967 作用: PHP 使用token验证可有效的防止非法来源数据提交访问,增加数据操作 ...
- 【由技及道】螺蛳壳里做道场-git仓库篇-gitlab-Vs-gitea【人工智障AI2077的开发日志001】
指令接收:「开始构建代码宇宙」 系统检测:需求模糊度99.9% 启动应急协议:构建最小可行性生态圈 核心组件锁定:代码基因库(人类称之为Git仓库) 需求分析:论人类语言的艺术性 人类指令翻译机 表面 ...