文章目录
python虚拟环境
介绍
Python虚拟环境是一种用于隔离不同Python项目所需依赖的机制。它允许在同一台机器上同时管理多个Python项目,每个项目都可以有自己独立的Python版本和依赖库,互不干扰。
注意:虚拟环境主要是防止我们项目之间python3版本或者库冲突的,虚拟环境中并没有独立的解释器,还是得依赖主机的python3和python3-venv
原理(管理工具太多,以venv为例,下同)
venv是Python自带的虚拟环境管理工具,用于创建和管理独立的Python环境。它的原理主要包括以下几个方面:
-
目录结构:venv会在指定的目录下创建一个独立的Python环境。该目录包含一个bin(或Scripts)子目录,其中包含了Python解释器和其他与环境相关的可执行文件。
-
Python解释器:venv会在指定目录下复制一份Python解释器。这个解释器是一个独立的副本,与系统中的Python解释器相互隔离。
-
环境变量:venv会在指定目录下创建一个activate脚本(或activate.bat),用于设置环境变量。运行该脚本后,会将指定目录下的Python解释器添加到系统的PATH环境变量中,使得在该虚拟环境下运行的Python程序能够使用正确的解释器。
-
包管理:venv会在指定目录下创建一个独立的site-packages目录,用于存放虚拟环境中安装的Python包。在虚拟环境中安装的包不会影响系统中的Python包,从而实现了包的隔离管理。
通过以上原理,venv实现了Python虚拟环境的创建和管理。使用venv可以方便地为不同的项目创建独立的Python环境,避免了包冲突和环境污染的问题。
参考文章:Python - Comprendre et démystifier virtualenv
注意:venv工具只能在Python 3.3及以上版本中使用。在Python 3.3之前,Python自带的虚拟环境管理工具是virtualenv
。virtualenv
是一个第三方库,可以在Python 2.x和Python 3.x中使用。
从Python 3.3开始,Python内置了venv模块,成为了Python的标准库,用于创建和管理虚拟环境。venv相比于virtualenv更加轻量和简单,因此在Python 3.3及以上版本中推荐使用venv来管理虚拟环境。
如果使用的是Python 3.3以下的版本,可以考虑使用virtualenv来创建和管理虚拟环境。安装virtualenv可以使用pip命令:pip install virtualenv
。安装完成后,可以使用virtualenv
命令来创建虚拟环境。
安装与使用
以下是在Linux中安装以及使用Python虚拟环境的详细步骤:
1. 安装虚拟环境工具(如果尚未安装)
$ sudo apt-get install python3-venv
2. 创建一个新的虚拟环境
$ python3.8 -m venv myenv
这将在当前目录下创建一个名为myenv
的虚拟环境。
初始状态下虚拟环境是空的,里面没有任何包或依赖库。
python3.8 -m venv myenv
命令会在当前目录下创建一个名为myenv
的虚拟环境文件夹。该文件夹中包含了一个独立的Python解释器,以及一些用于管理虚拟环境的脚本和工具。
3. 激活虚拟环境
$ source myenv/bin/activate
在创建虚拟环境后,需要激活虚拟环境才能使用它。激活虚拟环境会将该虚拟环境的Python解释器添加到系统的环境变量中,使得在命令行中运行python
命令时,默认使用虚拟环境中的解释器。
激活虚拟环境后,将看到命令行提示符前面有(myenv)
字样,表示已经进入了虚拟环境。
可以使用pip
命令来安装所需的包和依赖库,以及进行其他的Python开发工作。
4. 安装依赖库
在虚拟环境中,可以使用pip
命令安装所需的Python依赖库,例如:
(myenv) $ pip install requests
5. 运行Python程序
在虚拟环境中,可以使用python
命令运行Python程序,例如:
(myenv) $ python myscript.py
6. 退出虚拟环境
当完成了当前项目的开发或者需要切换到其他项目时,可以使用以下命令退出虚拟环境:
(myenv) $ deactivate
此时,命令行提示符将恢复为正常状态。
通过使用Python虚拟环境,可以轻松地管理不同项目的依赖关系,避免了不同项目之间的冲突,并且可以保持每个项目的独立性。
7. 删除虚拟环境
要删除虚拟环境,你可以按照以下步骤进行操作:
-
打开终端或命令提示符。
-
使用以下命令来删除它:
python -m venv --clear path/to/venv
请将
path/to/venv
替换为你要删除的虚拟环境的路径。这个命令将删除虚拟环境的所有文件和目录。
我不能直接删除虚拟环境目录吗?
是的,你可以直接删除虚拟环境目录来删除虚拟环境。虚拟环境目录是一个包含虚拟环境文件和目录的文件夹,通常以.venv
或venv
命名。
要删除虚拟环境目录,你可以按照以下步骤进行操作:
-
打开终端或命令提示符。
-
确定要删除的虚拟环境目录的路径。
-
使用操作系统提供的文件管理器或命令行工具,删除虚拟环境目录。你可以使用以下命令来删除目录:
-
在Windows上,使用以下命令删除目录:
rmdir /s /q path/to/venv
-
在Linux和macOS上,使用以下命令删除目录:
rm -rf path/to/venv
请将
path/to/venv
替换为你要删除的虚拟环境目录的路径。 -
请注意,直接删除虚拟环境目录将永久删除其中的所有文件和安装的软件包,所以请确保你不再需要该虚拟环境中的任何内容。如果你计划重新创建虚拟环境,请确保在删除之前备份任何重要的文件或数据。
那你为什么还用python -m venv --clear path/to/venv?区别在哪
使用python -m venv --clear path/to/venv
命令可以清除虚拟环境中的所有文件和目录,包括已安装的软件包和Python解释器。这个命令会将虚拟环境还原到初始状态,就像刚创建时一样。
与直接删除虚拟环境目录相比,使用python -m venv --clear
命令有以下区别:
-
清除虚拟环境:
python -m venv --clear
命令会执行一些额外的清理操作,以确保虚拟环境中的所有文件和目录都被正确删除。这包括删除已安装的软件包、Python解释器和其他虚拟环境相关的文件。 -
保留虚拟环境配置:使用
python -m venv --clear
命令清除虚拟环境后,虚拟环境目录仍然存在,但其中的文件和目录已被删除。这意味着你可以在需要时重新激活虚拟环境,并重新安装所需的软件包,而无需重新创建虚拟环境。
总之,使用python -m venv --clear
命令可以更彻底地清除虚拟环境,并保留虚拟环境的配置,以便在需要时重新使用。但是,如果你确定不再需要虚拟环境中的任何内容,直接删除虚拟环境目录也是一个有效的方法。
虚拟环境主机间移植
可以将虚拟环境从一个主机移植到另一个主机。以下是一种常见的方法:
1. 拷贝
在源主机上,将整个虚拟环境文件夹复制到目标主机。假设虚拟环境文件夹名为myenv
,源主机的路径为/path/to/source
,目标主机的路径为/path/to/destination
。可以使用scp
命令或其他文件传输工具来复制文件夹:
$ scp -r /path/to/source/myenv user@destination:/path/to/destination
2. 激活
在目标主机上,进入虚拟环境文件夹,并激活虚拟环境:
$ cd /path/to/destination/myenv
$ source bin/activate
这样,就成功将虚拟环境从源主机移植到目标主机,并在目标主机上重新创建了相同的虚拟环境。
需要注意的是,虚拟环境的移植可能会受到不同主机之间的操作系统和Python版本的差异影响。确保目标主机上的操作系统和Python版本与源主机兼容,以避免出现兼容性问题。
生产环境下python虚拟环境项目开机自启配置
如果有多个项目需要在开机时自启动,并且每个项目都有不同的虚拟环境,可以为每个项目创建一个启动脚本,并在脚本中指定相应的虚拟环境。
以下是一种常见的方法:
- 创建一个启动脚本文件,比如
start_project1.sh
,用于启动project1
项目。在脚本中,需要指定虚拟环境的路径,并激活虚拟环境。假设project1
的虚拟环境路径为/path/to/project1/venv
,项目的入口文件为main.py
,脚本内容如下:
#!/bin/bash
# 激活虚拟环境
source /path/to/project1/venv/bin/activate
# 运行项目
python /path/to/project1/main.py
- 将脚本文件设置为可执行:
$ chmod +x start_project1.sh
- 将启动脚本添加到系统的启动项中。具体的方法可能因操作系统而异。以下是一种常见的方法:
- 对于Systemd(如Ubuntu 16.04+):
创建一个project1.service
文件,内容如下:
[Unit]
Description=Project1 Service
After=network.target
[Service]
ExecStart=/path/to/start_project1.sh
[Install]
WantedBy=multi-user.target
将project1.service
文件复制到/etc/systemd/system/
目录下:
$ sudo cp project1.service /etc/systemd/system/
启用服务并设置开机自启:
$ sudo systemctl enable project1.service
- 对于SysVinit(如Ubuntu 14.04-):
将启动脚本的路径添加到/etc/rc.local
文件中:
$ sudo nano /etc/rc.local
在文件中添加以下内容(在exit 0
行之前):
/path/to/start_project1.sh
通过以上步骤,可以为每个项目创建一个启动脚本,并将其添加到系统的启动项中。这样,每次开机时,系统会自动启动相应的项目,并使用正确的虚拟环境。
python虚拟环境管理工具介绍
Python虚拟环境管理工具是用于创建、激活、管理和删除Python虚拟环境的工具。以下是一些常用的Python虚拟环境管理工具及其作用:
常用虚拟环境管理工具
1. venv
venv是Python自带的虚拟环境管理工具,从Python 3.3版本开始引入。它可以创建、激活和管理虚拟环境,使用简单方便。
2. virtualenv
virtualenv是一个第三方的Python虚拟环境管理工具,可以在Python 2和Python 3上使用。它提供了更多的功能和选项,例如可以指定Python解释器版本、创建基于现有环境的虚拟环境等。
3. conda
conda是一个流行的开源虚拟环境和包管理工具,适用于Python和其他编程语言。它可以创建、激活和管理虚拟环境,并提供了强大的包管理功能,可以方便地安装、更新和删除包。
4. pyenv
pyenv是一个用于管理多个Python版本的工具。它允许在同一台计算机上安装和切换不同的Python版本,并为每个项目选择适当的Python版本。
以下是pyenv的一些主要特点和用法:
-
安装Python版本:pyenv可以帮助安装多个Python版本。可以使用
pyenv install
命令来安装特定版本的Python。例如,要安装Python 3.9.2,可以运行以下命令:pyenv install 3.9.2
-
切换Python版本:使用pyenv,你可以轻松地在不同的Python版本之间进行切换。通过
pyenv global
命令设置全局Python版本,通过pyenv local
命令设置项目级别的Python版本。例如,要将全局Python版本设置为3.9.2,可以运行以下命令:pyenv global 3.9.2
-
列出可用的Python版本:使用
pyenv versions
命令可以列出所有已安装的Python版本。例如,运行以下命令来列出所有可用的Python版本:pyenv versions
-
创建虚拟环境:pyenv还提供了一个插件pyenv-virtualenv,用于创建和管理Python虚拟环境。通过使用pyenv-virtualenv插件,你可以在不同的Python版本之间创建和切换虚拟环境。要安装pyenv-virtualenv插件,可以运行以下命令:
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
安装完成后,你可以使用
pyenv virtualenv
命令来创建虚拟环境。例如,要在Python 3.9.2中创建一个名为myenv的虚拟环境,可以运行以下命令:pyenv virtualenv 3.9.2 myenv
要激活虚拟环境,可以使用
pyenv activate
命令:pyenv activate myenv
要退出虚拟环境,可以使用
pyenv deactivate
命令:pyenv deactivate
pyenv是一个非常有用的工具,可以帮助管理多个Python版本和虚拟环境。它适用于开发人员在不同项目中使用不同的Python版本的情况。
5. virtualenvwrapper
virtualenvwrapper是一个用于管理Python虚拟环境的第三方工具,它提供了一组命令和功能,使得创建、切换和删除虚拟环境更加方便。
以下是使用virtualenvwrapper的基本步骤:
-
安装virtualenvwrapper:在命令行中运行以下命令来安装virtualenvwrapper(确保已经安装了Python):
pip install virtualenvwrapper
-
配置环境变量:virtualenvwrapper需要设置一个环境变量来指定虚拟环境的存储位置。在你的shell配置文件(如
.bashrc
、.bash_profile
或.zshrc
)中添加以下行:export WORKON_HOME=~/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh
-
重新加载shell配置文件:运行以下命令来重新加载shell配置文件,使配置生效:
source ~/.bashrc
-
创建虚拟环境:使用
mkvirtualenv
命令来创建虚拟环境。
使用virtualenvwrapper创建虚拟环境时,可以通过指定PROJECT_HOME
环境变量来设置虚拟环境的存储位置。默认情况下,虚拟环境会被创建在$HOME/.virtualenvs
目录下,但可以将其更改为项目目录。
以下是将虚拟环境创建在项目目录下的步骤:
-
在shell配置文件(如
.bashrc
、.bash_profile
或.zshrc
)中添加以下行:export PROJECT_HOME=/path/to/your/project export WORKON_HOME=$PROJECT_HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh
将
/path/to/your/project
替换为项目目录的实际路径。 -
重新加载shell配置文件:运行以下命令来重新加载shell配置文件,使配置生效:
source ~/.bashrc
-
创建虚拟环境:使用
mkvirtualenv
命令来创建虚拟环境。例如,运行以下命令来创建一个名为myenv
的虚拟环境:mkvirtualenv myenv
虚拟环境将会被创建在你的项目目录下的
.virtualenvs
子目录中。
请注意,使用virtualenvwrapper创建的虚拟环境仍然可以通过workon
命令来激活和切换。只是虚拟环境的存储位置被设置为项目目录下的.virtualenvs
子目录。
-
激活虚拟环境:创建虚拟环境后,它会自动激活。你可以通过运行以下命令来手动激活虚拟环境:
workon myenv
-
使用虚拟环境:激活虚拟环境后,你可以在其中安装和使用包,运行Python命令等。
-
退出虚拟环境:在命令行中运行以下命令来退出虚拟环境:
deactivate
-
删除虚拟环境:在命令行中运行以下命令来删除虚拟环境:
rmvirtualenv myenv
virtualenvwrapper还提供了其他一些有用的命令和功能,例如列出所有虚拟环境、切换虚拟环境等。可以通过运行workon
命令来列出所有的虚拟环境。
venv和virtualenv区别,还有pyenv
venv模块是Python3.3之后标准库自带的虚拟环境创建和管理工具,在一定程度上能够替代virtualenv。但venv是Python3.3才有的,Python2.X不能使用,而virtualenv同时支持Python2.X和Python3.X,特别是在当前的生产环境中Python2.X还占有很大比例的情况下我们依然需要virtualenv。
参考文章:Python虚拟环境pyenv、venv(pyvenv)、virtualenv之间的区别,终于搞清楚了
一般我们解释器不用python3.3以下,就用venv就行了,命令也简单(pyenv貌似比较强大,但是感觉有点复杂,没深入研究过。。。):
创建:
python3.8 -m venv /path/to/venv_xxx
激活:
source /path/to/venv_xxx/bin/activate
退出:
deactivate
相关疑问
创建虚拟机环境是基于已有的python解释器吗?(是)
创建虚拟环境时,可以选择基于系统中已有的Python解释器,也可以选择安装一个新的Python解释器。
如果选择基于已有的Python解释器创建虚拟环境,那么虚拟环境将使用系统中已安装的Python解释器作为基础。这意味着虚拟环境将与系统中的Python解释器共享相同的Python版本和可执行文件。
例如,如果在系统中安装了Python 3.8,并使用python3.8 -m venv myenv
命令创建虚拟环境,那么虚拟环境将使用系统中的Python 3.8解释器作为基础。
另一方面,如果选择安装一个新的Python解释器来创建虚拟环境,那么虚拟环境将使用新安装的Python解释器作为基础。这意味着虚拟环境将拥有独立的Python版本和可执行文件。
例如,如果在系统中没有安装Python解释器,但下载并安装了Python 3.9,并使用python3.9 -m venv myenv
命令创建虚拟环境,那么虚拟环境将使用新安装的Python 3.9解释器作为基础。
无论选择基于已有的Python解释器还是安装一个新的Python解释器来创建虚拟环境,虚拟环境都将是独立的,并且可以在其中安装和管理自己的包和依赖库。这样可以确保不同项目之间的依赖关系不会相互干扰。
虚拟环境安装的库是否会影响非虚拟环境的库?(不会)
虚拟环境中安装的库不会影响非虚拟环境中的库。虚拟环境是一个独立的环境,它有自己的包管理和依赖关系。在虚拟环境中安装的库只会对该虚拟环境生效,不会影响到系统中的其他Python环境或其他虚拟环境。
当激活虚拟环境后,系统会将虚拟环境中的Python解释器添加到环境变量中,使得在命令行中运行python
命令时,默认使用虚拟环境中的解释器。
例如,如果在虚拟环境中安装了一个特定版本的包,而在系统中的其他Python环境中没有安装该包,那么在虚拟环境中运行的Python程序将使用虚拟环境中的包,而在非虚拟环境中运行的Python程序将使用系统中的其他包(如果有的话)。
这种隔离的机制使得可以在不同的项目中使用不同的依赖库版本,而不会相互干扰。每个虚拟环境都可以拥有自己独立的包和依赖库,使得项目之间的依赖关系更加清晰和可控。
不同的虚拟环境,可能解释器版本相同,它们安装了很多相同版本的库,这样不是很占用空间吗?(是的)
如果在不同的虚拟环境中安装了相同版本的库,那么这些库的副本将会占用额外的磁盘空间。这可能会导致一些重复的文件和依赖关系存在于不同的虚拟环境中,从而占用更多的存储空间。
然而,虚拟环境的目的是为了隔离不同的项目和依赖关系,使得每个项目都可以拥有独立的环境。这种隔离可以确保项目之间的依赖关系不会相互干扰,从而提供更好的可维护性和可控性。
虽然在不同的虚拟环境中可能会存在一些重复的库副本,但这种重复通常是可以接受的。现代的硬盘驱动器通常具有足够的存储空间,可以容纳多个虚拟环境和它们的库副本。
如果对磁盘空间的使用非常关注,可以考虑使用一些工具来管理虚拟环境和库的依赖关系,以减少重复的副本。例如,可以使用pip
的--system-site-packages
选项来允许虚拟环境访问系统中已安装的库,从而避免重复安装相同的库。
总的来说,虽然在不同的虚拟环境中可能会存在一些重复的库副本,但这是为了保证项目之间的隔离和独立性。在现代硬盘驱动器的条件下,这种重复的副本通常是可以接受的。
不同主机python3-venv版本不同问题
不同版本的python3-venv兼容吗,比如我这台主机是3.8的python3-venv,我把虚拟环境弄到另一台主机,发现是3.6的python3-venv,能兼容吗?
Python的虚拟环境(venv)是与特定Python版本相关的工具。不同版本的Python可能会有不同的venv实现和功能。因此,虚拟环境在不同版本的Python之间可能不兼容。
如果你在一台主机上使用Python 3.8的venv创建了虚拟环境,并尝试将该虚拟环境复制到另一台主机上,该主机上的Python版本为3.6,可能会遇到兼容性问题。因为Python 3.8的venv可能包含3.8特定的功能和库,而在Python 3.6上可能不支持。
为了确保兼容性,建议在目标主机上使用相同版本的Python来创建虚拟环境。这样可以确保虚拟环境中的Python版本与主机上的Python版本匹配,避免潜在的兼容性问题。
如果你需要在不同版本的Python之间共享虚拟环境,可以考虑使用其他工具,如conda环境管理器,它可以提供跨Python版本的兼容性。
按你上面那样说,如果我这台主机是3.8的python3-venv,我把虚拟环境弄到另一台主机,发现是3.6的python3-venv,我可以在目标主机上直接安装python3.8-venv,是否还需要在目标主机安装python3.8?
是的,如果你将虚拟环境从一台主机复制到另一台主机,并且目标主机上的Python版本与源主机不同,你需要在目标主机上安装与虚拟环境中使用的Python版本相匹配的Python。
在你的情况下,如果源主机上的虚拟环境是使用Python 3.8的venv创建的,而目标主机上的Python版本是3.6,你需要在目标主机上安装Python 3.8以及相应的venv模块。
安装Python 3.8的步骤可能因操作系统而异。你可以通过以下步骤在目标主机上安装Python 3.8:
-
检查目标主机上是否已经安装了Python 3.8。你可以在终端或命令提示符下运行以下命令来检查Python版本:
python3.8 --version
如果已经安装了Python 3.8,则会显示Python版本号。如果没有安装,你需要进行下一步。
-
下载Python 3.8的安装程序。你可以从Python官方网站(https://www.python.org/downloads/)下载适用于你的操作系统的Python 3.8安装程序。
-
运行安装程序并按照提示进行安装。确保在安装过程中选择将Python 3.8添加到系统路径中。
-
安装完成后,你可以再次运行以下命令来验证Python 3.8是否已成功安装:
python3.8 --version
如果显示Python 3.8的版本号,则表示安装成功。
安装完Python 3.8后,你可以使用以下命令创建一个新的虚拟环境,并将源主机上的虚拟环境复制到目标主机上:
python3.8 -m venv /path/to/new/venv
请将/path/to/new/venv
替换为你想要创建虚拟环境的路径。
这样,你就可以在目标主机上使用与源主机相同的Python版本和虚拟环境了。