Ubuntu搭建Python虚拟环境:virtualenv

devtools/2024/9/23 11:17:46/

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包,
源码如下:

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(name[level:], 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。


http://www.ppmy.cn/devtools/13397.html

相关文章

K8s: 持久化存储之卷, NFS卷

卷 Volume 1 ) 概述 容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题 首先,当容器崩溃时,kubelet 将重新启动容器,容器中的文件将会丢失——因为容器会以干净的状态重建其次,当在一个 Po…

云主机是云服务器吗?

随着云服务器、云安全等云服务的崛起,对于云服务器并不了解的朋友会对生活中各式各样的云主机、云服务产品感到困惑,云主机和云服务器是否是同一个概念呢? 云主机是云服务器吗? 云主机是云服务器的一种形式,都是将计算…

Music Tag Editor Pro for Mac:音乐标签编辑软件

Music Tag Editor Pro for Mac是一款功能强大的音乐标签编辑软件,专为Mac用户设计,旨在帮助用户轻松管理音乐库中的标签信息。 Music Tag Editor Pro for Mac v8.0.0中文激活版下载 该软件支持多种音频格式,包括MP3、M4A、FLAC、APE等&#x…

修改键盘映射(改易误触按键)

原文:https://blog.iyatt.com/?p14730 测试环境 Windows 11 专业版 23H2 Beta 预览版 操作 步骤 打开注册表 地址栏复制粘粘回车进入路径:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 右侧空白处右键新建二进制…

SQL server简介

SQL Server 是 Microsoft 开发的一个关系数据库管理系统(RDBMS),广泛用于企业级的数据管理。以下是 SQL Server 的详细使用教程,包括安装、配置、使用 SQL Server Management Studio (SSMS) 以及执行基本的数据库操作。 一&#…

如何使用Python进行Web开发,如Flask或Django?

Python是一种非常流行的Web开发语言,它提供了多种框架来帮助开发者快速构建Web应用程序。Flask和Django是两个非常受欢迎的Python Web框架,它们各有特点和优势。 Flask Flask是一个轻量级的Web应用框架,它易于上手且灵活。Flask适合小型项目…

修改npm源--多种方式

2024年,1月22日 npm.taobao.org 域名证书已到期下线。 重置官方源 npm config set registry https://registry.npmjs.org/ 淘宝源,使用最新版,旧版停止了 npm config set registry https://registry.npmmirror.com 查看当前镜像源 npm …

git rebase 使用详解

git rebase 用于将本地分支的更改重新应用到其基础分支(通常是主分支)。这对于在开发过程中合并分支时清理提交历史非常有用。以下是 git rebase 的使用方法: 1.首先,确保你的工作区是干净的,没有未提交的更改。你可以…