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 ...
随机推荐
- 用python做时间序列预测三:时间序列分解
在初始概念篇中,我们简单提到了时间序列由趋势.周期性.季节性.误差构成,本文将介绍如何将时间序列的这些成分分解出来.分解的使用场景有很多,比如当我们需要计算该时间序列是否具有季节性,或者我们要去除该时 ...
- 实战AI大模型辅助编程:新安江水文模型和SCE-UA优化算法的移植与实现
新安江水文模型与 SCE-UA 优化算法是水文学和水资源管理领域的重要工具,二者结合使用可以有效模拟流域的水文过程并优化模型参数. 新安江水文模型是一种概念性水文模型,主要用于模拟流域的降雨-径流关系 ...
- [luogu4114] Qtree1 题解
\(LCT\) 动态维护树上路径最值,典中典了. 时间复杂度 \(O(n\log n)\). #include<bits/stdc++.h> #define fa(x) lct[x].fa ...
- KUKA库卡机器人KR120维修故障参考方案
随着智能制造的飞速发展,KUKA库卡机器人KR120以其稳定的特点,在自动化生产线上扮演着举足轻重的角色.然而,任何机械设备在长期运行过程中都难免会遇到故障.本文将针对KUKA库卡机器人KR120维修 ...
- 大数据之路Week08_day03 (Hive优化)
Hive优化(下面的红色标记是十分重要的,大部分情况是需要开启的) 优化1:hive的抓取策略理论上来说,Hive中的所有sql都需要进行mapreduce,但是hive的抓取策略帮我们省略掉了这个过 ...
- C# 委托与 Lambda 表达式转换机制及弱事件模式下的生命周期分析
1. 委托内部结构 委托类型包含三个重要的非公共字段: _target 字段 静态方法包装:当委托包装一个静态方法时,该字段为 null. 实例方法包装:当委托包装实例方法时,该字段引用回调方法所操作 ...
- python基础-数据类型、字典、集合、文件操作(打开、关闭、读写、追加等)
前言 !!!注意:本系列所写的文章全部是学习笔记,来自于观看视频的笔记记录,防止丢失.观看的视频笔记来自于:哔哩哔哩武沛齐老师的视频:2022 Python的web开发(完整版) 入门全套教程,零基础 ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(5)
1.问题描述: 提供两套标准方案,可根据体验需求选择: 1.地图Picker(地点详情) 用户体验:①展示地图 ②标记地点 ③用户选择已安装地图应用 接入文档:https://developer.hu ...
- C++ open()和read()函数使用详解
对于Framework工程师来说,必要C或者C++编程能力是必须的,像对设备节点的操作是最基本的操作,那么我们便会用到open和read函数.open()函数用于打开文件,而read()函数用于从打开 ...
- WSL2 - Ubuntu 22.04使用记录
1 安装 搭配Windows Terminal使用为佳,在微软商店可下载: 然后依照官网描述即可. 命令行中运行wsl --install即可.不过由于想自行指定发行版,于是: wsl --list ...