[Python] Python 虚拟环境管理
Python 环境隔离问题的起源
我们经常会遇见这样的场景:
由于Python的解释器版本众多,各版本之间差异非常大。特别是python2和python3,互不兼容。
有些项目可能用的python2.7,有些项目可能用的是python3.6,有些则使用的3.8等,但是它们却需要运行在同一个服务器环境中。(docker除外,docker容器可以隔离不同的项目环境。)
系统的一些服务组件一般也会依赖Python环境。不同的Linux发行版自带的Python也不同。如ubuntu16自带2.7和3.5版本, Centos7依赖python2.7。
而系统很多组件都依赖自带的解释器,比如yum等,你不能轻易删除这个版本,一旦删除或者更改都可能造成系统出问题。
比如Centos7系统自带的python是2.7,系统很多组件比如yum依赖的都是2.7这个版本。但是我们发现这些工具开头使用的都是:#!/usr/bin/python。
而一些新的使用python开发的服务组件,它们依赖的确实python3.6以上的版本,但是它们一些代码开头用的也是这个引用:#!/usr/bin/python,而非#!/usr/bin/python3
它们都是用python这一个引用,却没有使用python2、python3这样分开,这就很容易导致它们的一些python引用冲突。
- 我们都知道python的软件包依赖经常是个很头疼的问题,经常因为这个问题导致到家在安装一些python环境或者服务组件时失败。
- 而不同的python解释器版本,对软件包依赖库的管理也是个问题。
比如sqlalchemy这个包,有些项目使用的python2.7版本,它需要依赖这个库,有些项目使用的python3.6版本,它也需要依赖这个库,有些项目使用的python3.8版本,它同样也需要依赖这个库,
但是头疼的是,这三者它们依赖的这个包版本还不一致。sqlalchemy从0.1-2.0有众多版本。
这时候如果你在系统上直接使用pip install sqlalchemy的话,它只能选择安装一个版本,但是这样其他两个项目是无法使用这个版本,就会出现依赖冲突的问题。
由于 Python 的依赖库管理是中心化的,而且大版本上的不兼容且长期并行,就出现了这么一个独特的话题。
你的环境隔离了吗
Python 多环境隔离解决方案
- 那么有没有一个终极的解决办法能在管理不同解释器版本的同时控制不同的包环境呢?
- 有的,Python 社区已经涌现了众多这种工具。
site-packages
- Python 多环境隔离,可以让你的每个项目拥有独立的依赖库,即 site-packages。
venv : Python 官方提供的多环境管理工具
- 为什么把 venv 放在第1个,因为它是自 Python 3.3 版本之后添加的官方库,自 3.6 版本之后,成为官方推荐的多环境管理工具。
也就是说,你不需要安装任何第三方库就可以实现多环境管理了。
注意:python 3.3版本之后自带的模块,只支持3.3版本之后的,不支持2.x
- venv是python 3自带的,不需要额外安装库就能运行
- venv过于简单,没有额外的api。
- 只能创建个虚拟环境,不能指定系统不存在的python环境版本
- 不能查看环境列表
- 只能在 Python 3.3 版本以后,2.x用不了
virtualenv
- virtualenv 是目前最流行的 python 虚拟环境配置工具。
- 它不仅同时支持 python2 和 python3,而且可以为每个虚拟环境指定 python 解释器,并可以选择继承基础版本的包。
- virtualenv 可以说是 venv 的增强版本,不过早在 venv 出现之前,virtualenv 就算是最受欢迎的命令行环境管理工具了。
- venv 的许多特性也是借鉴的 virtualenv,相比于 venv,其强大之处主要在:
- 更快
- 扩展性更强
- 自动发现并可创建多版本的 Python 环境
- 可通过 pip 更新
- 丰富的编程接口
- 跟venv基本一致,功能过于简单,就只是创建个虚拟隔离环境,没有多余功能。
- 相比venv,它支持在2.x、3.x以及windows,
- 相比venv,可以指定python版本与选择是否继承父环境的包。(venv也可以指定版本)
- 这里virtualenv 有些不便,因为virtual的启动、停止脚本都在特定文件夹,可能一段时间后,你可能会有很多个虚拟环境散落在系统各处,你可能忘记它们的名字或者位置。
这一点远没有pyenv好。
virtualenvwrapper : 基于 virtualenv 的封装版
- 鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper。 virtualenvwrapper提供了一系列命令使得和虚拟环境工作变得便利。它把你所有的虚拟环境都放在一个地方。
官网参考: https://virtualenvwrapper.readthedocs.io/
- 本质上就是基于virtualenv的封装,将所有虚拟环境整合在一个目录下,默认(~/.virtualenvs)
- 提供了很多api,可以管理(新增,删除,复制,切换)虚拟环境
- 支持tab补全,切换环境很方便。
conda
- [Python] Miniforge: 开源版conda环境管理器 - 博客园/千千寰宇
- [Python] Python/Conda安装教程 - 博客园/千千寰宇
Python 虚拟环境(venv)的使用指南
安装 venv 【必读】
- python3.6及以上已默认安装,python 3.5需要通过系统的包管理工具安装
否则, Python 3.X(具体哪个版本未知,亲测:Python3.12)及之后,直接使用操作系统自带的 python(不支持此命令) / python3 / pip / pip3时,将报错误:
- root@xxxbackend-service-xxx-xxx:/# pip install jieba3
- error: externally-managed-environment
- × This environment is externally managed
- ╰─> To install Python packages system-wide, try apt install
- python3-xyz, where xyz is the package you are trying to
- install.
- If you wish to install a non-Debian-packaged Python package,
- create a virtual environment using `python3 -m venv path/to/venv`.
- Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
- sure you have python3-full installed.
- If you wish to install a non-Debian packaged Python application,
- it may be easiest to use pipx install xyz, which will manage a
- virtual environment for you. Make sure you have pipx installed.
- See /usr/share/doc/python3.12/README.venv for more information.
- note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
- hint: See PEP 668 for the detailed specification.
复制代码要求创建虚拟环境后,方可正常使用pip(3) install等命令。
- # apt -y install python3 python3-pip
- # apt -y install python3-venv (安装命令,即此一行即可;如下是安装后的综合应用Demo,了解即可)
- # python3 --version
- Python 3.12.3
- # python --version
- bash: python: command not found
- # pip3 --version
- pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)
- # $HOME/.venv/bin/pip3 --version (推荐此绝对路径的命令)
- pip 24.0 from /root/.venv/lib/python3.12/site-packages/pip (python 3.12)
- # pip --version
- pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)
- # $HOME/.venv/bin/pip --version (推荐此绝对路径的命令)
- pip 24.0 from /root/.venv/lib/python3.12/site-packages/pip (python 3.12)
- //用户未创建虚拟环境时,可使用默认的虚拟环境下的可执行命令: (推荐如下绝对路径的命令)
- # $HOME/.venv/bin/python
- # $HOME/.venv/bin/python3
- # $HOME/.venv/bin/pip
- # $HOME/.venv/bin/pip3
- # $HOME/.venv/bin/python --version
- Python 3.12.3
- # $HOME/.venv/bin/python3 --version
- Python 3.12.3
- //激活默认的虚拟环境
- . $HOME/.venv/bin/activate
- //激活指定项目的虚拟环境
- . /XXX/MyProject/.venv/bin/activate
复制代码
- 上述 Ubuntu Python / pip 的安装, 未激活时使用的操作系统自带的 pip / pip3 / python / python3
- # which pip3
- /usr/bin/pip3
- # which pip
- /usr/bin/pip
- # whereis pip
- pip: /usr/bin/pip
- //激活指定的虚拟环境
- # . $HOME/.venv/bin/activate
- (.venv) # which pip
- /root/.venv/bin/pip
- (.venv) # whereis pip
- pip: /usr/bin/pip /root/.venv/bin/pip
- //退出虚拟环境
- # deactivate
复制代码可通过可执行程序的路径分辨出来:
【操作系统】默认的:
- /usr/bin/python
- /usr/bin/python3
- /usr/bin/pip
- /usr/bin/pip3
【虚拟环境】创建的:
- $HOME/.venv/bin/python 或 用户自定义的虚拟环境
- $HOME/.venv/bin/python3 或 用户自定义的虚拟环境
- $HOME/.venv/bin/pip 或 用户自定义的虚拟环境
- $HOME/.venv/bin/pip3 或 用户自定义的虚拟环境
创建虚拟环境
- //进入项目目录 | 注意:项目代码不需要放在虚拟环境目录下,任意位置即可,只需要激活对应虚拟环境
- cd ~/myProject
- python3 -m venv myEnv
- 或 python -m venv myEnv
复制代码 激活虚拟环境
- source myEnv/bin/activate
- 或 . myEnv/bin/activate
- source $HOME/.venv/bin/activate
- 或 . $HOME/.venv/bin/activate
复制代码在 Windows 环境下,打开PowerShell,执行下面的命令:
- cd xxx
- .\test_env\Scripts\Activate.ps1
复制代码
- . venv/bin/activate
- source venv/bin/activate
.与source做着完全相同的事情,唯一区别是虽然source更具可读性,但它可能并非在所有 shell 中都可用。
该命令在当前 shell 中运行脚本的内容,这种情况下,很重要的是activate,因为脚本所做的其中一件事是导出和修改当前 shell 中的环境变量。
.根据上下文有不同的含义。当用作路径(或路径的一部分)时,它仅表示“当前文件夹”。
现在,我们可以使用pip来安装和管理Python依赖包。
在已激活的当前虚拟环境下使用pip
- (myEnv) [root@ops-130 myProject]# pip3 install sqlalchemy
- 或
- (myEnv) [root@ops-130 myProject]# pip install sqlalchemy
复制代码 使用--user选项,可避免操作系统权限问题
- 当我们在虚拟环境中使用pip时,可以通过添加--user选项来避免权限问题。
--user选项: 告诉pip将包安装到当前用户的主目录下,而不是系统范围内的目录。
例如,要安装一个名为requests的包,可以使用以下命令:
- pip install --user requests
复制代码这样,pip将会将requests包安装到当前用户的Python环境中,而不需要管理员权限。
更改虚拟环境的文件权限
- 如果我们对虚拟环境的目录或文件具有读取和写入权限,但pip仍然出现“Permission denied”错误,我们可以尝试手动更改目录或文件的权限。
- 通过使用 chmod 命令,我们可以为目录和文件添加必要的读取和写入权限。以下是修改权限的示例命令:
- chmod +rwx myEnv
- chmod +rwx myEnv/bin/activate
复制代码这将为 myEnv 目录和 activate 文件添加读取、写入和执行权限。
退出虚拟环境
Python 虚拟环境(virtualenv)的使用指南
安装virtualenv
- //pip install virtualenv
- pip3 install virtualenv
复制代码 查看virtualenv版本
创建虚拟环境
- cd /data/myenv5
- virtualenv myenv5
复制代码它会在当前路径下,创建 myenv5 的目录,虚拟环境的所有命令和包都在这个目录下。
https://img2020.cnblogs.com/blog/1307747/202201/1307747-20220110101659984-636847171.png
- bin: 存放一些python、pip命令的目录
- lib : virtualenv的软件包管理目录site-package在lib/python3.6/site-packages/下
https://img2020.cnblogs.com/blog/1307747/202201/1307747-20220110101700759-256610460.png
按照指定版本的python解释器,创建虚拟环境
- 创建的虚拟环境的python解释器,默认使用virtualenv里的版本。
- 如果你是把virtualenv安装在python2里,那默认的就是python2,安装在python3里,默认的就是python3。
- 当然,你也可以自己指定使用哪个解释器版本
比如:
- virtualenv myvenv6 -p python3.9
复制代码 激活虚拟环境
- source /data/myenv5/bin/activate
复制代码 https://img2020.cnblogs.com/blog/1307747/202201/1307747-20220110101702147-1162510397.png
在虚拟环境中安装和使用包
- 一旦虚拟环境激活成功,在该环境中安装和使用Python包与在其他环境中相同。
可以使用pip命令来安装所需的包,例如:
这将在虚拟环境中安装名为requests的包。我们可以在项目代码中直接引用这个包,而不需要担心与其他环境的冲突。
删除虚拟环境
继承基础环境的依赖包
- virtualenv从版本20开始,默认就是--no-site-packages了,默认就是不继承父环境的包。
创建的虚拟环境是一个不带任何第三方包的“干净”的Python运行环境。
如果有教程告诉你,“--no-site-packages选择不继承父环境的包”,这个命令已经废弃了。
- 那么,如果你现在想要继承父环境的包,怎么办?使用--system-site-packages
例如,先在父环境,pip安装一个包jieba
创建一个可以访问基础环境包的虚拟环境:
- virtualenv --system-site-packages myvenv7
复制代码 https://img2020.cnblogs.com/blog/1307747/202201/1307747-20220110101703310-594362269.png
进入虚拟目录,查看python版本:
- [root@ops-130 data]# cd myvenv7/
- [root@ops-130 myvenv7]# source ./bin/activate
- (myvenv7) [root@ops-130 myvenv7]# python -V
- Python 3.6.15
- (myvenv7) [root@ops-130 myvenv7]# pip -V
- pip 21.3.1 from /data/myvenv7/lib/python3.6/site-packages/pip (python 3.6)
- (myvenv7) [root@ops-130 myvenv7]# ls /data/myvenv7/lib/python3.6/site-packages/
复制代码如下图,它并没有将依赖包【拷贝】过来。
https://img2020.cnblogs.com/blog/1307747/202201/1307747-20220110101703929-1830508913.png
- (myvenv7) [root@ops-130 myvenv7]# python
- Python 3.6.15 (default, Dec 31 2021, 15:08:17)
- [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
- Type "help", "copyright", "credits" or "license" for more information.
- >>> import jieba
- >>>
复制代码没有问题,说明可以访问父环境的包。--system-site-packages生效了。
https://img2020.cnblogs.com/blog/1307747/202201/1307747-20220110101704572-1561595620.png
- 其他详细介绍,请参考 virtutalenv 官网
https://virtualenv.pypa.io/en/latest/reference/
Python 虚拟环境(virtualenvwrapper)的使用指南
安装 virtualenvwrapper
安装 virtualenvwrapper(确保virtualenv已安装)
- pip3 install virtualenv
- pip3 install virtualenvwrapper
- pip3 install virtualenvwrapper-win #Windows使用该命令
复制代码
- virtualenvwrapper默认将所有的虚拟环境放在~/.virtualenvs目录下管理
可以修改环境变量WORKON_HOME来指定虚拟环境 的保存目录。
- # 可选
- # 修改virtualenvwrapper的虚拟环境存放目录
- mkdir -p /data/virtualenvs/ # 可选,我们这里安装在默认的
-
- vim /etc/profile
- # virtualenvwrapper
- export WORKON_HOME=$HOME/.virtualenvs
- export PROJECT_HOME=$HOME/Devel
复制代码
- 虽然已经pip安装了,但是此时,你依然无法使用virtualenvwrapper
上面的virtualenvwrapper被安装到了你使用pip3的python环境下,如下:
- [root@ops-130 test]# ls /usr/local/python3.6/bin/virtualenvwrapper.sh
- /usr/local/python3.6/bin/virtualenvwrapper.sh
复制代码 https://img2020.cnblogs.com/blog/1307747/202201/1307747-20220110101705282-952665799.png
- source /usr/local/python3.6/bin/virtualenvwrapper.sh
复制代码
- 可以将这个命令也一起放到环境变量中,.bashrc
- vim /root/.bashrc
-
- # virtualenvwrapper
- export WORKON_HOME=$HOME/.virtualenvs
- export PROJECT_HOME=$HOME/Devel
- VIRTUALENVWRAPPER_PYTHON=/usr/local/python3.6/bin/python3
- source /usr/local/python3.6/bin/virtualenvwrapper.sh
复制代码
- 注意:如果你安装的virtualenv不在系统默认的python解释器上,就需要单独指定virtualenvwrapper使用的python路径:VIRTUALENVWRAPPER_PYTHON,否则激活的时候,会报错,如下:
No module named virtualenvwrapper
如下报错,因为它默认使用系统的python路径了。
https://img2020.cnblogs.com/blog/1307747/202201/1307747-20220110101706513-679689272.png
- 添加VIRTUALENVWRAPPER_PYTHON变量即可。
- export VIRTUALENVWRAPPER_PYTHON=/usr/local/python3.6/bin/python3
复制代码 创建虚拟环境
创建的同时,还默认激活了虚拟环境
- 虚拟环境目录不会放到当前目录下了,它默认装在了/root/.virtualenvs,所有的虚拟环境都会放到这个目录下
- (venv8) [root@ops-130 data]# ls /root/.virtualenvs/venv8/
- bin lib pyvenv.cfg
复制代码
- 如果想要指定python版本,可以使用--python命令
- mkvirtualenv --python=/usr/local/python3.9/bin/python3 venv9
- # 有环境变量可以简化
- mkvirtualenv --python=python3.9 venv9
复制代码 查看当前的虚拟环境目录
- (venv9) [root@ops-130 data]# workon
- venv8
- venv9
复制代码 切换虚拟环境
- (venv9) [root@ops-130 data]# workon venv8
- (venv8) [root@ops-130 data]# python -V
- Python 3.6.15
复制代码 退出虚拟环境
- (venv8) [root@ops-130 data]# deactivate
- [root@ops-130 data]#
复制代码 删除虚拟环境
补充说明
- virtualenvwrapper 提供环境名字的tab补全功能。
当您有很多环境,并且很难记住它们的名字时,这就显得很有用。
- workon 也能停止您当前所在的环境,所以您可以在环境之间快速的切换。
- 其它命令参考:
https://virtualenvwrapper.readthedocs.io/en/latest/
Z FAQ for Python 虚拟环境管理
Q: Python venv 与 conda 的区别?【必读】
- Python的venv和conda都是用于管理虚拟环境的工具,但它们在设计目标、功能特点以及使用场景等方面存在诸多区别,以下是详细对比:
设计目标
- venv:
- 是Python标准库的一部分,从Python 3.3开始引入。
- 主要目的是为Python应用程序提供一个隔离的环境,使得不同项目可以使用不同的依赖包版本,而不会相互干扰。它专注于Python本身的包管理,旨在解决Python项目中常见的“依赖冲突”问题。
- conda:
- 是一个开源的包管理和环境管理系统,最初是为Anaconda发行版而设计的,但它可以独立于Anaconda使用。
- 它不仅支持Python,还支持多种编程语言和工具。其目标是提供一个跨平台的解决方案,用于安装、运行和管理各种数据科学和科学计算相关的软件包及其依赖项,包括但不限于Python、R、Julia等语言的包。
功能特点
- 环境隔离
- venv:
- 创建的虚拟环境是基于Python解释器的,它会复制Python解释器及其标准库到虚拟环境中,然后在虚拟环境中安装所需的包。这样,不同虚拟环境中的包是相互独立的,不会影响全局的Python环境。
- 例如,你可以为一个使用Django 2.x的项目创建一个虚拟环境,为另一个使用Django 3.x的项目创建另一个虚拟环境,两个环境中的Django版本互不干扰。
- conda:
- 提供了更强大的环境隔离功能。它不仅可以隔离Python包,还可以隔离不同版本的Python解释器以及其他语言的包。通过创建不同的conda环境,你可以轻松地在不同项目中使用不同版本的Python以及其他依赖包,而不用担心它们之间的冲突。
- 例如,在一个conda环境中,你可以安装Python 3.7、TensorFlow 2.x以及其他相关的依赖包;在另一个conda环境中,你可以安装Python 3.8、PyTorch 1.x等,两个环境完全独立。
- 包管理
- venv:
- 使用pip作为包管理工具。它依赖于pip来安装、更新和卸载Python包。pip会从Python Package Index(PyPI)或其他指定的Python包仓库中下载和安装包。
- 例如,你可以在venv创建的虚拟环境中使用pip install numpy来安装NumPy包。
- conda:
- 自带一套完整的包管理系统。它有自己的包仓库(Anaconda Repository),其中包含了大量经过测试和验证的科学计算和数据分析相关的包。conda不仅可以安装Python包,还可以安装其他语言的包。
- 例如,你可以使用conda install numpy来安装NumPy包,conda会自动解析包的依赖关系,并从其仓库中下载和安装所需的包及其依赖项。
- 依赖解决
- venv:
- 在依赖解决方面相对简单。它主要依赖于pip来处理包的依赖关系。当安装一个包时,pip会尝试下载并安装该包及其所有依赖项。然而,在某些情况下,如果依赖关系较为复杂,可能会出现版本冲突等问题。
- conda:
- 具有更强大的依赖解决能力。它能够自动解析复杂的依赖关系,并尝试找到一组兼容的包版本来满足所有依赖要求。这在处理大型项目或涉及多个依赖包时非常有用,可以有效避免版本冲突问题。
- 跨平台支持
- venv:
- 作为Python标准库的一部分,它本身是跨平台的,可以在Windows、macOS和Linux等操作系统上使用。但是,它主要关注Python环境的隔离和包管理,对于跨平台的其他方面(如系统依赖项的安装)支持有限。
- conda:
- 提供了广泛的跨平台支持。它不仅可以管理Python环境,还可以处理一些系统级的依赖项。例如,在Windows、macOS和Linux上,conda都可以安装和管理相同版本的Python以及其他包,使得跨平台开发和部署变得更加容易。
使用场景
- venv:
- 适用于普通的Python项目,尤其是那些主要依赖Python包的项目。如果你的项目主要是使用Python进行开发,并且对环境隔离的要求主要是针对Python包,那么venv是一个轻量级且方便的选择。
- 例如,一个简单的Web应用程序,使用Flask框架和一些Python库,就可以使用venv来创建虚拟环境并管理依赖。
- conda:
- 更适合于数据科学、科学计算和机器学习等领域。这些领域通常需要使用多种语言和工具,并且对包的版本和依赖关系要求较为严格。conda能够很好地满足这些需求,提供一个稳定、可靠的环境管理解决方案。
- 例如,在进行深度学习项目时,需要安装TensorFlow或PyTorch等框架,以及大量的科学计算库(如NumPy、SciPy等),conda可以方便地创建一个包含所有所需包的环境,并确保它们之间的兼容性。
性能和资源占用
- venv:
- 由于它是基于Python标准库实现的,通常具有较小的资源占用。创建虚拟环境的速度相对较快,因为它主要是复制Python解释器和标准库,然后在虚拟环境中安装所需的包。
- 例如,在创建一个简单的venv虚拟环境时,通常只需要几秒钟到几十秒的时间,具体取决于系统性能和包的数量。
- conda:
- 相对来说,conda在创建环境和安装包时可能会占用更多的资源。它需要从自己的仓库中下载包,并且在解析依赖关系和安装包时可能会花费更多的时间。不过,conda提供了缓存机制,可以提高后续操作的效率。
- 例如,创建一个包含多个大型科学计算包的conda环境可能需要几分钟的时间,具体取决于网络速度和系统性能。
社区和生态系统
- venv:
- 作为Python标准库的一部分,它得到了Python社区的广泛支持。由于其简单易用,很多Python开发者都会使用venv来管理项目环境。同时,由于它与pip紧密集成,可以方便地使用PyPI上的大量Python包。
- conda:
- 具有庞大的社区和丰富的生态系统。由于conda最初是为数据科学领域设计的,因此它得到了数据科学社区的广泛支持。Anaconda公司也提供了大量的资源和工具来支持conda的使用,包括Anaconda发行版、Anaconda Repository等。此外,conda还与许多数据科学和科学计算相关的项目和工具紧密集成。
总的来说,venv和conda都是非常有用的工具,但它们适用于不同的场景和需求。
如果你的项目主要是Python开发,并且对环境隔离的要求主要是针对Python包,那么venv是一个很好的选择;
如果你的项目涉及到数据科学、科学计算等领域,或者需要管理多种语言和工具的包,那么conda可能是更合适的选择。
Y 推荐文献
- [Python] Python 基础教程 - 博客园/千千寰宇
含: Python 环境的安装(尤其: Ubuntu / Docker环境)
- [Python] 包管理器Pip - 博客园/千千寰宇
含: Pip 的安装
- [Python] Miniforge: 开源版conda环境管理器 - 博客园/千千寰宇
- [Python] Python/Conda安装教程 - 博客园/千千寰宇
- 新版ubuntu使用pip时发生的错误 - CSDN 【推荐】
新版ubuntu使用pip时发生错误 : error: externally-managed-environment (“外部管理环境”错误)
新的 Ubuntu 发行版中,正在使用 Python 包来实现此增强功能,这个更新是为了避免操作系统包管理器 (如pacman、yum、apt) 和 pip 等特定于 Python 的包管理工具之间的冲突,这些冲突包括 Python 级 API 不兼容和文件所有权冲突。
可以看一下python官方的说明: PEP 668 – Python base environments Python 增强提案 (PEP) - realpython.com
方法1:如果你习惯于原来的用法可以强制删除此警告 : sudo mv /usr/lib/python3.x/EXTERNALLY-MANAGED /usr/lib/python3.x/EXTERNALLY-MANAGED.bk
方法2:老实点使用pipx: apt install pipx / pipx install package_name / pipx ensurepath / pipx uninstall package_name / ...
方法3:使用venv : apt install python3-venv / apt install python3.10-venv / mkdir -p $HOME/.env && python3 -m venv $HOME/.env/project_name
如果你是专业开发人员,在运行或构建py文件时遇到“ModuleNotFoundError: No module named 'xxx'”错误,推荐使用Python虚拟环境,借助虚拟环境,使用不同版本的包依赖项和Python,避免包之间的任何冲突。
X 参考文献
- Python 如何在使用虚拟环境时避免出现“Permission denied”错误 - geek-docs.com
我们将介绍在使用虚拟环境时如何避免出现“Permission denied”错误。当使用虚拟环境venv及pip安装Python包时,可能会遇到权限不足的问题。
- python - Virtualenv ".venv/bin/activate" 与 "source venv/bin/activate" - StackOverflow
2种激活虚拟环境的方法: . venv/bin/activate / source venv/bin/activate
- venv/bin/目录下没有activate文件,导致无法进入虚拟环境 - CSDN
sudo apt-get install python3.8-venv
- python多环境管理(venv与virtualenv) - 博客园
- Linux:python安装 + 虚拟环境配置(virtualenv、virtualenvwrapper) - 博客园
本文作者: 千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |