Ubuntu搭建Python虚拟环境:virtualenv

1 缘起

一阶段:Python开发,使用Windows环境,使用的相关依赖在Windows环境都能使用;

进入二阶段,开发了一个新功能,使用了k8s,Python依赖为:easy_k8s,

刚好,easy_k8s没有Windows版本,只能使用Linux环境,

当然,另一个状况是,公司收到Anaconda通知,没有商业授权,禁止在开发中使用Anaconda,

索性,不使用Anaconda,直接上virtualenv替代,

使用Ubuntu环境部署Python开发环境,过程记录如下,

帮助开发者快速搭建开发环境。

版本:
Ubuntu:20.04.6 LTS
Python:3.10
Pip:24.0

2 部署过程

2.1 环境准备

复制代码
# 添加包仓库:Personal Package Archive
sudo add-apt-repository ppa:deadsnakes/ppa
# 更新仓库源
sudo apt update
# 安装python3.10
sudo apt install python3.10
# 安装Distutils
sudo apt install python3.10-distutils 
# 安装虚拟环境
sudo apt install virtualenv

Distutils是工具包,用于构建/安装Python环境中需要的包(可以是C/C++包、Python包),

安装过程中,没有安装distutils,使用pip安装依赖时出错。

2.2 应用

2.2.1 格式:新建虚拟环境

复制代码
virtualenv /path

2.2.2 在.venv目录新建虚拟环境

  • 指定python版本新建虚拟环境

    virtualenv --python=/usr/bin/python3.10 .venv

2.2.3 升级pip版本:升级.venv虚拟环境pip

升级虚拟环境中pip的版本,保证后续的依赖安装可以正常进行,

遇到的问题:pip版本为20.x,安装依赖时,抛出异常,无法继续安装,

异常信息见Q&A部分。

复制代码
curl -sS https://bootstrap.pypa.io/get-pip.py | .venv/bin/python3.10

2.2.4 安装依赖:在.venv虚拟环境中

在虚拟环境中安装依赖,

使用ALiYun源,这个源的包比较全,更新及时。

复制代码
.venv/bin/pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

3 Q&A

3.1 问题1

RuntimeError: failed to query /usr/bin/python3.10 with code 1 err: '/usr/lib/python3/dist-packages/virtualenv/discovery/py_info.py:16: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives\n from distutils.command.install import SCHEME_KEYS\nTraceback (most recent call last):\n File "/usr/lib/python3/dist-packages/virtualenv/discovery/py_info.py", line 16, in \n from distutils.command.install import SCHEME_KEYS\nModuleNotFoundError: No module named 'distutils.command'\n'

3.1.1 原因

缺少distutils包。

distutils是辅助安装Python依赖的工具包,缺少distutils时,

会出现无法正常安装依赖问题,因为安装源码中使用到了distutils包,

源码如下:

py 复制代码
from distutils.command.install import SCHEME_KEYS

因此,为了保证安装依赖正常进行,务必安装distutils工具包。

3.1.2 方案

安装distutils 包。

复制代码
sudo apt install python3.10-distutils 

3.2 问题2

Traceback (most recent call last):

File "/home/m/projects/p/.venv/bin/pip3", line 8, in

sys.exit(main())

File "/home/m/projects/p/.venv/lib/python3.10/site-packages/pip/_internal/cli/main.py", line 73, in main

command = create_command(cmd_name, isolated=("--isolated" in cmd_args))

File "/home/m/projects/p/.venv/lib/python3.10/site-packages/pip/_internal/commands/init .py", line 96, in create_command

module = importlib.import_module(module_path)

File "/usr/lib/python3.10/importlib/init .py", line 126, in import_module

return _bootstrap._gcd_import(namelevel:, package, level)

File "

3.2.1 原因

pip版本低,不满足需求。

3.2.2 方案

重新安装高版本pip。

复制代码
curl -sS https://bootstrap.pypa.io/get-pip.py | {python路径}

在.venv虚拟环境中提升pip版本:

复制代码
curl -sS https://bootstrap.pypa.io/get-pip.py | .venv/bin/python3.10

全局安装:

复制代码
curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10

4 总结

Ubuntu部署Python虚拟环境需要注意:

(1)添加个人源:deadsnakes

(2)安装distutils包;

(3)升级pip版本:推荐使用最新版24。

相关推荐
ltl33 分钟前
HTTP/3 实战:从 QUIC 到 H3 的完整请求链路
linux
ltl1 小时前
POSIX 文件锁:flock、fcntl 与 NFS 上的工程陷阱
linux
ltl1 小时前
CUDA 生态:cuBLAS、cuDNN、NCCL、Triton、CUTLASS
linux
饺子大魔王的男人1 小时前
CentOS部署Cockpit:图形化查看系统、日志与服务状态
linux·运维·centos
不会就选b1 小时前
Linux之信号(二)
linux·运维·服务器
我是小灰灰吖2 小时前
QT在线安装器使用指南:从下载到配置完整教程
linux·qt·ubuntu
GlueNa2SiO32 小时前
第十八章 Linux故障排查与恢复
linux·服务器·笔记·学习
寺中人3 小时前
Linux 基础命令入门实战教程:从零掌握常用操作,新手快速上手
linux·运维·服务器·shell·linux 命令·linux 基础教程·linux 入门
小张成长计划..4 小时前
【Linux】18:基础IO
linux·运维·服务器
MIXLLRED4 小时前
解决——Ubuntu远程桌面指令更换网络
linux·网络·ubuntu